2017-07-18 12 views
5

私は、Javaで、Kotlin委譲クラスを拡張し、次のエラーを取得しようとしている:Javaで、Kotlin委任クラスを拡張できますか?

Cannot inherit from final 'Derived'

は、以下のコードを参照してください。

私がやっていることは、クラスのメソッドを飾ることです。

コトルが最終的にDerivedを定義した理由は何ですか? Derivedは最終的なものにならないので、私はそれを継承できますか?

のJava:

new Derived(new BaseImpl(10)) { // Getting the error on this line: `Cannot inherit from final 'Derived'` 
}; 

Kotlin:ここから

interface Base { 
    fun print() 
} 

class BaseImpl(val x: Int) : Base { 
    override fun print() { print(x) } 
} 

class Derived(b: Base) : Base by b 

*例:https://kotlinlang.org/docs/reference/delegation.html

答えて

9

Kotlin classes are final in by default。 (KotlinからまたはJavaからかどうか)を拡張するopenとしてクラスをマーク:

open class Derived(b: Base) : Base by b 

(私はそれを試していないが)、これは委任クラスは、Javaの相互運用に影響を与えないはずであるという事実。

関連する問題