含まれているローカル クラス内のジェネリック親クラスの型パラメーターを参照できないのはなぜですか?
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;
}
}
ただし、最初のバリアントの何が問題なのかを理解したいと思います。何か案は?