Как использовать параметр типа общего родителя внутри локальных классов? - PullRequest
2 голосов
/ 20 августа 2009

Почему я не могу сослаться на параметр типа общего родительского класса внутри содержащихся локальных классов?

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 Ответ

1 голос
/ 20 августа 2009

Это может быть ошибка в Sun javac, см. этот вопрос , который включает возможные решения в ответах.

...