相关疑难解决方法(0)

Java:Instanceof和Generics

在我查看值的索引的通用数据结构之前,我想看看它是否this已经参数化的类型的实例.

但是当我这样做时Eclipse会抱怨:

@Override
public int indexOf(Object arg0) {
    if (!(arg0 instanceof E)) {
        return -1;
    }
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

无法对类型参数E执行instanceof检查.请改为使用其擦除对象,因为泛型类型信息将在运行时被擦除

有什么更好的方法呢?

java generics instanceof typechecking

127
推荐指数
6
解决办法
16万
查看次数

为什么"t instanceof T"不允许,其中T是类型参数,t是变量?

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会导致故障,从而禁止它?

java generics instanceof type-parameter

6
推荐指数
3
解决办法
5292
查看次数

泛型和instanceof - java

好的,这是我的类,它封装了一个对象,并将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)

怎么才能让这个工作?谢谢!

java generics instanceof

4
推荐指数
1
解决办法
3045
查看次数

以通用方式使用instanceof

有没有办法根据方法的传递参数使用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条件.那可能吗?如果是这样,怎么样?:)

谢谢

java instanceof

1
推荐指数
1
解决办法
773
查看次数