代码之家  ›  专栏  ›  技术社区  ›  janko

如何在本地类中使用泛型父类的类型参数?

  •  2
  • janko  · 技术社区  · 16 年前

    为什么我不能在包含的本地类中引用泛型父类的类型参数?

    public class IsGeneric<T> {
        public void doSomething(T arg) {
            class A {
                T x;
            }
    
            A foo = new A();
            foo.x = arg;
            T bar = foo.x;  // error: found java.lang.Object, required T
        }
    }
    

    根据Eclipse,上述代码非常好,但javac 1.6.0_11似乎认为 foo.x 类型为java.lang.Object。解决这个问题的一个办法显然是 A

    public class IsGeneric<T> {
        public void doSomething(T arg) {
            class A<S> {
                S x;
            }
    
            A<T> foo = new A<T>();
            foo.x = arg;
            T bar = foo.x;
        }
    }
    

    但是,我想了解第一种变体有什么问题。有什么想法吗?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    这可能是Sun的bug javac this question