Kotlin

2017-09-11 11 views
3

ではない偶然のオーバーライドは、私はこのインタフェースを実装するJavaインタフェースKotlin

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

と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 

答えて

0

あなたはバイトコードレベルでの競合構造が存在することになるので、そのような「偶然のオーバーライド」のリスクを受け入れることをKotlinコンパイラを伝えることはできません。 @JvmNameを使用して、デリゲートでは機能しないためバイトコードで生成されるフィールドの名前を変更することも、遅延コードをデリゲートにすることもできません。

+0

C#またはVBでできるように、オーバーライドを意図的にフラグを立てることができればいいと思います。これは私がKotlinでヒットした最初のもので、これまで半分の焼き言語に見える... – csmith