在我查看值的索引的通用数据结构之前,我想看看它是否this
已经参数化的类型的实例.
但是当我这样做时Eclipse会抱怨:
@Override
public int indexOf(Object arg0) {
if (!(arg0 instanceof E)) {
return -1;
}
Run Code Online (Sandbox Code Playgroud)
这是错误消息:
无法对类型参数E执行instanceof检查.请改为使用其擦除对象,因为泛型类型信息将在运行时被擦除
有什么更好的方法呢?
Eclipse表示,由于泛型橡皮擦,Type Parameter不允许使用instanceof操作.
我同意在运行时,不会保留类型信息.但请考虑以下类的通用声明:
class SomeClass<T>{
T t;
SomeClass(Object o){
System.out.println(o instanceof T); // Illegal
}
}
Run Code Online (Sandbox Code Playgroud)
在运行时,不会出现T!但是如果我实例化这个类型为Integer的类,那么相应的对象将具有Integer类型的字段t.
那么,为什么我不能用T检查变量的类型,它可以在运行时被Integer替换.而我实际上会做类似"o instanceof Integer"的事情.
在哪些情况下,允许带有类型参数的instanceof会导致故障,从而禁止它?
好的,这是我的类,它封装了一个对象,并将equals和String委托给这个对象,为什么我不能使用???的实例?
public class Leaf<L>
{
private L object;
/**
* @return the object
*/
public L getObject() {
return object;
}
/**
* @param object the object to set
*/
public void setObject(L object) {
this.object = object;
}
public boolean equals(Object other)
{
if(other instanceof Leaf<L>) //--->ERROR ON THIS LINE
{
Leaf<L> o = (Leaf<L>) other;
return this.getObject().equals(o.getObject());
}
return false;
}
public String toString()
{
return object.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
怎么才能让这个工作?谢谢!
有没有办法根据方法的传递参数使用instanceof?例
doSomething(myClass.class); /* I would like to call this also with other classes */
public void doSomething(/*generic parameter that accepts all classes, not just myClass */) {
if (myObject instanceOf /* the generic parameter */ == true) {...}
}
Run Code Online (Sandbox Code Playgroud)
有时我会使用myClass.class调用该方法,但有时我想用someOtherClass.class调用它 - 我不想改变if条件.那可能吗?如果是这样,怎么样?:)
谢谢