所以我在Java中有这个课程:
public class Foo<T>{ }
在这个类中,我想知道T是否实现某些接口。
以下代码不起作用,但这是我要完成的工作的主意:
if(T.class implements SomeInterface){ // do stuff }
所以我想检查T传递给Foo 的类是否具有implements SomeInterface其签名。
T
implements SomeInterface
可能吗?怎么样?
奇怪的是,泛型也extends用于接口。1您将要使用:
extends
public class Foo<T extends SomeInterface>{ //use T as you wish }
这实际上是实现的要求, 而不是true / false check 。
为了进行真/假检查,请使用无限制的generics(class Foo<T>{)并确保获得a,Class<T>以便您具有可靠的类型:
class Foo<T>{
Class<T>
if(SomeInterface.class.isAssignableFrom(tClazz));
哪里tClazz是类型的参数java.lang.Class<T>。
tClazz
java.lang.Class<T>
如果您得到的是可靠类型的参数,那么无非就是:
if(tParam instanceof SomeInterface){
但这仅适用于泛型声明。
1如果要扩展一个类和多个接口,则可以执行以下操作:<T extends FooClass & BarInterface & Baz>该类(仅一个,因为Java中没有多重继承)必须 首先进行 ,然后以任何顺序进行任何接口。
<T extends FooClass & BarInterface & Baz>