如何确定Java泛型是否实现特定接口?
我尝试了几种不同的方法,但它们都导致了"无法找到符号......变量T"的错误.
第一次尝试
public abstract class AbstractClass<T> {
public void doFoo() {
if (T instanceof SomeInterface){
// do stuff
}
}
}
Run Code Online (Sandbox Code Playgroud)
第二次尝试
public abstract class AbstractClass<T> {
public void doFoo() {
if (SomeInterface.class.isAssignableFrom(T)) {
// do stuff
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用对象的类添加构造函数.
public abstract class AbstractClass<T> {
private Class<T> clazz;
public AbstractClass(Class<T> clazz) {
this.clazz = clazz;
}
public void doFoo() {
if (clazz instanceof SomeInterface){
// do stuff
}
}
}
Run Code Online (Sandbox Code Playgroud)
一个约束添加到所述类型T
与T extends SomeInterface
,从而限制类型T
是的子类型SomeInterface
.
public abstract class AbstractClass<T extends SomeInterface> {
public void doFoo() {
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
绑定它.
public abstract class <T extends SomeInterface> { }
Run Code Online (Sandbox Code Playgroud)
然后你保证它至少 SomeInterface
在作为方法的参数传递时.
从您的方法来看,没有办法做到这一点,因为您没有引用T
代码中任何位置的实例.如果你为它添加了一个参数,你至少可以得到更多.
public void doFoo(T obj) { }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
67 次 |
最近记录: |