so I have this class in Java:
public class Foo<T>{
}
and inside this class I want to know if T implements certain interface.
The following code DOES NOT work but it's the idea of what I want to accomplish:
if(T.class implements SomeInterface){
// do stuff
}
so I want to check if the class T
that was passed to Foo have implements SomeInterface
on its signature.
Is it possible? How?
Use
isAssignableFrom()
isAssignableFrom() determines if the class or interface represented by this Class object is either the same as, or is a superclass or superinterface of, the class or interface represented by the specified Class parameter.
Generics, oddly enough, use
extends
for interfaces as well.1 You'll want to use:This is actually a requirement for the implementation, not a true/false check.
For a true/false check, use unbounded generics(
class Foo<T>{
) and make sure you obtain aClass<T>
so you have a refiable type:where
tClazz
is a parameter of typejava.lang.Class<T>
.If you get a parameter of refiable type, then it's nothing more than:
but this won't work with just the generic declaration.
1If you want to require extending a class and multiple interfaces, you can do as follows:
<T extends FooClass & BarInterface & Baz>
The class(only one, as there is no multiple inheritance in Java) must go first, and any interfaces after that in any order.you can check it using isAssignableFrom
or to get the array of interface as