含まれているローカルクラス内の汎用親クラスの型パラメータを参照できないのはなぜですか?ローカルクラスの内部で汎用的な親の型パラメータを使用するには?
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;
}
}
しかし、私は第一の変形が悪いのかを理解したいと思います。何か案は?
私はC#で同じことを知っていますが、C#では 'class A'も使用でき、2番目のジェネリックパラメータを保存できます。 –
C#にはローカルクラスもないので、C#とまったく同じではありません。 –
...クラス内のクラスと基本的にJavaクラスのクラスは異なります。 –