以下代码:
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导致以下编译器错误:
错误:(34,9)Public-API内联函数无法访问非公共API 'internal open fun():[错误:]在根包'
中定义错误:(34,18)未解决的参考。以下候选人均不得 因接收器类型不匹配而适用:public val FragmentType#1(类型参数) com.gitlab.morality.navigable.support.navigate).parameters: MutableMap,其中FragmentType:Navigable定义于 com.gitlab.morality.navigable.support
我不明白我在这里做错了什么。这些错误消息意味着什么?
我可以解决这个问题,而不是让parameters
属性成为Navigable
的成员,但是然后需要一个实现者来实现该属性,这会剥夺这种技术的吸引力。除了被标记为Navigable
以使用Navigable
功能之外,实现类不需要执行任何特殊操作。