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?

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 .


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.