检查泛型 T 是否实现了接口
2022-09-01 11:33:03
所以我在Java中有这个类:
public class Foo<T>{
}
在这个类中,我想知道T是否实现了某个接口。
下面的代码不起作用,但这是我想要完成的想法:
if(T.class implements SomeInterface){
// do stuff
}
所以我想检查传递给Foo的类是否有签名。Timplements SomeInterface
可能吗?如何?
所以我在Java中有这个类:
public class Foo<T>{
}
在这个类中,我想知道T是否实现了某个接口。
下面的代码不起作用,但这是我想要完成的想法:
if(T.class implements SomeInterface){
// do stuff
}
所以我想检查传递给Foo的类是否有签名。Timplements SomeInterface
可能吗?如何?
奇怪的是,泛型也用于接口。1 您需要使用:extends
public class Foo<T extends SomeInterface>{
//use T as you wish
}
这实际上是实现的要求,而不是真/假检查。
对于真/假检查,请使用无界泛型(),并确保获得一个,以便您具有可置类型:class Foo<T>{Class<T>
if(SomeInterface.class.isAssignableFrom(tClazz));
其中 是 类型的参数。tClazzjava.lang.Class<T>
如果您获得可修复类型的参数,那么它只不过是:
if(tParam instanceof SomeInterface){
但这不适用于通用声明。
1 个如果要要求扩展一个类和多个接口,可以执行以下操作:类(只有一个,因为在Java中没有多重继承)必须放在第一位,之后的任何接口必须以任何顺序进行。<T extends FooClass & BarInterface & Baz>
您可以使用 isAssignableFrom 进行检查
if (YourInterface.class.isAssignableFrom(clazz)) {
...
}
或者获取接口数组作为
Class[] intfs = clazz.getInterfaces();