2

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

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;
    }
}

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

4

1 回答 1

1

这可能是 Sun 的一个错误javac,请参阅这个问题,其中包括答案中可能的解决方案。

于 2009-08-20T09:50:23.050 回答