Digamos que eu queira uma variável de tipo, T, que estenda uma determinada classe e implemente uma interface. Algo como:
class Foo <T : Bar implements Baz> { ... }
Qual é a sintaxe para isso no Kotlin?
Apenas um limite superior pode ser especificado dentro dos colchetes angulares.
Kotlin oferece sintaxe diferente para restrições genéricas quando há mais de uma restrição:
class Foo<T>(val t: T) where T : Bar, T : Baz { ... }
e para funções:
fun <T> f(): Foo where T : Bar, T : Baz { ... }
Está documentado aqui .
fun <T> wrapClientListener(listener: RemoteController.OnClientUpdateListener): T where T : RemoteController.OnClientUpdateListener, T : NotificationListenerService
. Eu não me importo com o tipo de T. Mas quando chamo esse método, Kotlin pergunta qual é o tipo específico. Então, como posso chamar esse método?