2017-09-11 230 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