5

我在 NetBeans 中编写了如下代码:

public class Grafo<V, E>
{
    class Par
    {
        int a, b;
        Par(int a, int b) {
            this.a = a;
            this.b = b;
        }

        @Override
        public boolean equals(Object ob)
        {
            if(ob instanceof Par) {
                Par p = (Par)ob;
                return this.a==p.a && this.b==p.b;
            }

            return false;
        }
    }

    //stuff...
} //end of class Grafo

错误出现在内部类“Par”的方法 equals() 中。

NetBeans 说错误是“instanceof 的非法泛型类型”。错误在下面的行中。

            if(ob instanceof Par) {

错误的原因是什么?

4

2 回答 2

9

尝试ob instanceof Grafo<?,?>.Par

我认为编译器认为这ob instanceof Par涉及对泛型类型参数的运行时检查;即它等同于ob instanceof Grafo<V,E>.Par。但是instanceof测试不能检查泛型类型参数。

于 2009-12-13T06:01:04.637 回答
4
@SuppressWarnings("unchecked")
@Override
public boolean equals(Object ob)
{
    if(ob instanceof Grafo.Par) {
        Par p = (Par)ob;
        return this.a==p.a && this.b==p.b;
    }

    return false;
}

或者定义你的内部类static

于 2009-12-13T06:05:18.043 回答