一尘不染

检查泛型T是否实现接口

java

所以我在Java中有这个课程:

public class Foo<T>{
}

在这个类中,我想知道T是否实现某些接口。

以下代码不起作用,但这是我要完成的工作的主意:

if(T.class implements SomeInterface){
    // do stuff
}

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

可能吗?怎么样?


阅读 242

收藏
2020-12-03

共1个答案

一尘不染

奇怪的是,泛型也extends用于接口。1您将要使用:

public class Foo<T extends SomeInterface>{
    //use T as you wish
}

这实际上是实现的要求, 而不是true / false check

为了进行真/假检查,请使用无限制的generics(class Foo<T>{)并确保获得a,Class<T>以便您具有可靠的类型:

if(SomeInterface.class.isAssignableFrom(tClazz));

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

如果您得到的是可靠类型的参数,那么无非就是:

if(tParam instanceof SomeInterface){

但这仅适用于泛型声明。

1如果要扩展一个类和多个接口,则可以执行以下操作:<T extends FooClass & BarInterface & Baz>该类(仅一个,因为Java中没有多重继承)必须 首先进行 ,然后以任何顺序进行任何接口。

2020-12-03