2017-07-18 72 views
5

Próbuję przedłużyć, w Javie, a Kotlin delegowanie klasę i pojawia się następujący błąd:Czy mogę przedłużyć w Javie zajęcia delegujące Kotlin?

Cannot inherit from final 'Derived'

widoczny poniżej kod.

Co staram się zrobić, to udekorować metodę klasy.

Każdy pomysł, dlaczego Kotlin zdefiniował Derived jako ostateczny? Czy istnieje sposób, aby Derived nie był ostateczny, więc mogę go odziedziczyć?

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 

* Przykład stąd: https://kotlinlang.org/docs/reference/delegation.html

Odpowiedz

9

Kotlin classes are final in by default. Oznaczyć klasę jako open, aby go przedłużyć (niezależnie od Kotlin lub Java):

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

Fakt, że jest to klasa delegujący powinien mieć żadnego wpływu na współdziałanie Java (choć nie próbowałem).