2016-11-25 12 views
0

次のコード:ジェネリック拡張プロパティーレシーバータイプの不一致

package com.gitlab.morality.navigable.support 

import android.support.v4.app.Fragment 
import android.support.v4.app.FragmentActivity 
import kotlin.reflect.primaryConstructor 

interface Navigable 

val <FragmentType> FragmentType.parameters : MutableMap<String, in Any> 
    where FragmentType : Fragment, 
      FragmentType : Navigable 
    by lazy { mutableMapOf<String, Any>() } 

inline fun <reified FragmentType> 
    FragmentType.navigate(containerViewId : Int, vararg parameters : Pair<String, Any>) 
    where FragmentType : Fragment, 
      FragmentType : Navigable { 
    val fragment = FragmentType::class.primaryConstructor!!.call() 
    parameters.forEach { fragment.parameters[it.first] = it.second } 
    activity.supportFragmentManager.beginTransaction() 
      .replace(containerViewId, fragment) 
      .commit() 
} 

はKotlin 1.0.5と次のコンパイラエラーが発生します。

Error:(34, 9) Public-API inline function cannot access non-public-API 'internal open fun(): [ERROR : ] defined in root package'

Error:(34, 18) Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: public val FragmentType#1 (type parameter of com.gitlab.morality.navigable.support.navigate).parameters: MutableMap where FragmentType : Navigable defined in com.gitlab.morality.navigable.support

私は私がここで間違ってやっているのか理解していません。これらのエラーメッセージは何を意味しますか?

parametersプロパティをNavigableのメンバにする代わりに、このメソッドを実装するために実装者が必要ですが、実装するクラスがそうでないことを忘れてしまいますNavigableの機能を利用するには、Navigableとマークされている以上の特別な処理が必要です。

答えて

3

複数の受信者タイプを含む拡張プロパティは、現時点ではサポートされていません。問題が解決すると、通知を受けるにはKT-10468に投票できます。