我有Java介面
public interface LifecycleRegistryOwner extends LifecycleOwner {
@Override
LifecycleRegistry getLifecycle();
}
和实现此接口(interface)的Kotlin类,只要拥有
val lifecycle by lazy {
val result = LifecycleRegistry(this)
result
}
但是编译器说这是一个意外的覆盖。有没有办法告诉它是故意的?
我目前的实施
class PartnerSettingsActivity :AppCompatActivity(),LifecycleRegistryOwner {
private val registry = LifecycleRegistry(this) //<< hate this class-wide val
override fun getLifecycle(): LifecycleRegistry = registry
最佳答案
您不能告诉Kotlin编译器接受这种“意外覆盖”的风险,因为在字节码级别上会有冲突的构造。您都不能使用@JvmName来修改字节码中生成的字段的名称,因为它不适用于委托(delegate),而lazy是委托(delegate)。