2017-07-18 5 views
5

Ich versuche, in Java zu erweitern, eine Kotlin Klasse zu delegieren und erhalten den folgenden Fehler:Kann ich in Java eine Delegationsklasse für Kotlin erweitern?

Cannot inherit from final 'Derived'

Siehe Code unten.

Was ich versuche zu tun, ist eine Methode einer Klasse zu dekorieren.

Haben Sie eine Idee, warum Kotlin Derived als endgültig definiert? Gibt es einen Weg für Derived nicht endgültig zu sein, damit ich es erben kann?

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 

* Beispiel von hier: https://kotlinlang.org/docs/reference/delegation.html

Antwort

9

Kotlin classes are final in by default. Markieren Sie die Klasse als open ihn zu verlängern (ob aus Kotlin oder aus Java):

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

Die Tatsache, das eine delegierenden Klasse ist, sollte auf Java-Interop keine Auswirkungen haben (obwohl ich habe es nicht ausprobiert).

Verwandte Themen