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中没有多重继承)必须首先执行,并且之后的任何接口都必须按任何顺序执行.