2017-07-18 45 views
5

.Java'da bir Kotlin temsilci sınıfını genişletebilir miyim? Aşağıda</p> <blockquote> <p>Cannot inherit from final 'Derived'</p> </blockquote> <p>bakınız kodu: Bu sınıfı devrederek Java, bir KOTLIN içinde, genişletmek ve aşağıdaki hatayı almaya çalışıyorum

Yapmaya çalıştığım şey, bir sınıf yöntemini süslemek.

Kotlin, neden Derived'u nihai olarak tanımladı? Derived'un final olmaması için bir yolu var mı?

Java:

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

Kotlin: Buradan

interface Base { 
    fun print() 
} 

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

class Derived(b: Base) : Base by b 

* Örnek: https://kotlinlang.org/docs/reference/delegation.html

cevap

9

Kotlin classes are final in by default. (KOTLIN veya Java dan olsun) bunu uzatmak open olarak sınıf işaretle:

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

(bunu denemedim rağmen) bu bir delegating sınıf Java birlikte çalışma üzerinde herhangi bir etki yaratmayacaktır olduğu gerçeği.