Generisches Erweitern der Klasse AND implementiert die Schnittstelle in Kotlin

85

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?

Frenchdonuts
quelle

Antworten:

175

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 .

Hotkey
quelle
3
Gibt es eine Möglichkeit, es für parametrische Arten von Spaß zu verwenden, zum Beispiel für fun foo (arg: ClassType, InterfaceType) {}? Ohne Typparameter zur Klasse
hinzuzufügen
1
@Ufkoku, nein, es gibt keine Möglichkeit, dies zu tun: Es gibt keine Schnittpunkttypen in Kotlin und generische Parameter können nur explizit deklariert werden.
Hotkey
@hotkey Ich habe eine Funktion unten : 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?
Leimenghao