Angenommen, ich möchte eine Typvariable T, die eine bestimmte Klasse erweitert und eine Schnittstelle implementiert. Etwas wie:
class Foo <T : Bar implements Baz> { ... }
Wie lautet die Syntax dafür in Kotlin?
Angenommen, ich möchte eine Typvariable T, die eine bestimmte Klasse erweitert und eine Schnittstelle implementiert. Etwas wie:
class Foo <T : Bar implements Baz> { ... }
Wie lautet die Syntax dafür in Kotlin?
Antworten:
Innerhalb der spitzen Klammern kann nur eine Obergrenze angegeben werden.
Kotlin bietet unterschiedliche Syntax für generische Einschränkungen, wenn mehr als eine Einschränkung vorhanden ist:
class Foo<T>(val t: T) where T : Bar, T : Baz { ... }
und für Funktionen:
fun <T> f(): Foo where T : Bar, T : Baz { ... }
Es ist hier dokumentiert .
fun <T> wrapClientListener(listener: RemoteController.OnClientUpdateListener): T where T : RemoteController.OnClientUpdateListener, T : NotificationListenerService
. T's Typ ist mir egal. Aber wenn ich diese Methode aufrufe, fragt Kotlin nach dem spezifischen Typ. Wie kann ich diese Methode aufrufen?