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 に答える