Скажем, мне нужна переменная типа T, которая расширяет определенный класс и реализует интерфейс. Что-то типа:
class Foo <T : Bar implements Baz> { ... }
Каков синтаксис для этого в Котлине?
Скажем, мне нужна переменная типа T, которая расширяет определенный класс и реализует интерфейс. Что-то типа:
class Foo <T : Bar implements Baz> { ... }
Каков синтаксис для этого в Котлине?
Ответы:
Внутри угловых скобок можно указать только одну верхнюю границу.
Kotlin предлагает другой синтаксис для общих ограничений, когда существует более одного ограничения:
class Foo<T>(val t: T) where T : Bar, T : Baz { ... }
и для функций:
fun <T> f(): Foo where T : Bar, T : Baz { ... }
Это задокументировано здесь .
fun <T> wrapClientListener(listener: RemoteController.OnClientUpdateListener): T where T : RemoteController.OnClientUpdateListener, T : NotificationListenerService
. Меня не волнует тип Т. Но когда я вызываю этот метод, Kotlin запрашивает конкретный тип. Итак, как я могу вызвать этот метод?