2017-09-11 235 views
3

不是一个偶然的覆盖我的Java接口在科特林

public interface LifecycleRegistryOwner extends LifecycleOwner { 
@Override 
LifecycleRegistry getLifecycle(); 
} 

和科特林类实现这个接口,这将是非常不错的,只是

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 

回答

0

你不能告诉科特林编译器接受这样的“意外覆盖”的风险,因为那里将是对字节码层次矛盾的结构。您也不能使用@JvmName来修改字节码中生成的字段的名称,因为它不适用于委托,懒惰是委托。

+0

如果您可以在c#或VB中执行,可以将覆盖标记为有意识,这将是很好的。这是我在Kotlin遇到的第一件事,至今似乎是一种半熟的语言...... – csmith