Powiedzmy, że chcę zmienną typu T, która rozszerza określoną klasę i implementuje interfejs. Coś jak:
class Foo <T : Bar implements Baz> { ... }
Jaka jest składnia tego w Kotlinie?
W nawiasach ostrych można określić tylko jedną górną granicę.
Kotlin oferuje różną składnię dla ogólnych ograniczeń, gdy istnieje więcej niż jedno ograniczenie:
class Foo<T>(val t: T) where T : Bar, T : Baz { ... }
a dla funkcji:
fun <T> f(): Foo where T : Bar, T : Baz { ... }
Jest to udokumentowane tutaj .
fun <T> wrapClientListener(listener: RemoteController.OnClientUpdateListener): T where T : RemoteController.OnClientUpdateListener, T : NotificationListenerService
. Nie obchodzi mnie typ T. Ale kiedy nazywam tę metodę, Kotlin pyta o konkretny typ. Jak więc mogę wywołać tę metodę?