【问题标题】:"illegal generic type of instanceof" when using instanceof on an inner class type?“instanceof 的非法泛型类型”在内部类类型上使用 instanceof 时?
【发布时间】:2010-12-26 02:59:46
【问题描述】:

我在 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) {

错误的原因是什么?

【问题讨论】:

    标签: java inner-classes instanceof


    【解决方案1】:

    试试ob instanceof Grafo&lt;?,?&gt;.Par

    我认为编译器认为ob instanceof Par 涉及对泛型类型参数的运行时检查;即它相当于ob instanceof Grafo&lt;V,E&gt;.Par。但是instanceof 测试无法检查泛型类型参数。

    【讨论】:

      【解决方案2】:
      @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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多