检查通用T是否实现了接口

Bud*_*ius 18 java generics interface class implements

所以我在Java中有这个类:

public class Foo<T>{
}
Run Code Online (Sandbox Code Playgroud)

在这个类里面我想知道T是否实现了某个接口.

以下代码不起作用,但它是我想要完成的想法:

if(T.class implements SomeInterface){
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

所以我想检查T传递给Foo 的类是否有implements SomeInterface签名.

可能吗?怎么样?

ζ--*_*ζ-- 39

奇怪的是,泛型也extends用于接口.1你想要使用:

public class Foo<T extends SomeInterface>{
    //use T as you wish
}
Run Code Online (Sandbox Code Playgroud)

这实际上是实现的要求,而不是真/假检查.

对于真/假检查,使用无界泛型(class Foo<T>{)并确保获得一个,Class<T>因此您有一个可反复的类型:

if(SomeInterface.class.isAssignableFrom(tClazz));
Run Code Online (Sandbox Code Playgroud)

where tClazz是类型的参数java.lang.Class<T>.

如果你得到一个可反复类型的参数,那么它只不过是:

if(tParam instanceof SomeInterface){
Run Code Online (Sandbox Code Playgroud)

但这不仅适用于通用声明.

1如果您想要扩展一个类和多个接口,您可以执行以下操作:<T extends FooClass & BarInterface & Baz>该类(只有一个,因为Java中没有多重继承)必须首先执行,并且之后的任何接口都必须按任何顺序执行.