Почему я не могу сослаться на параметр типа общего родительского класса внутри содержащихся локальных классов?
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;
}
}
Однако я хотел бы понять, что не так с первым вариантом. Есть идеи?