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?
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?