131

Say I want a type variable, T, that extends a certain class and implements an interface. Something like:

class Foo <T : Bar implements Baz> { ... } 

What is the syntax for this in Kotlin?

1 Answer 1

267

Only one upper bound can be specified inside the angle brackets.

Kotlin offers different syntax for generic constraints when there is more than one constraint:

class Foo<T>(val t: T) where T : Bar, T : Baz { ... } 

and for functions:

fun <T> f(): Foo where T : Bar, T : Baz { ... } 

It is documented here.

Sign up to request clarification or add additional context in comments.

3 Comments

Is there any way to use it for parametr type of fun, for example, fun foo(arg : ClassType, InterfaceType){}? Without adding type parameter to class
@Ufkoku, no, there's no way to do it: there's no intersection types in Kotlin, and generic parameters can only be declared explicitly.
@hotkey I have a function below:fun <T> wrapClientListener(listener: RemoteController.OnClientUpdateListener): T where T : RemoteController.OnClientUpdateListener, T : NotificationListenerService. I don't care of T's type. But When I call this method, Kotlin asks for the specific type. So how can i call this method?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.