次のコード:ジェネリック拡張プロパティーレシーバータイプの不一致
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
とマークされている以上の特別な処理が必要です。