2009-08-20 5 views
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; 
    } 
} 

しかし、私は第一の変形が悪いのかを理解したいと思います。何か案は?

+0

私はC#で同じことを知っていますが、C#では 'class A 'も使用でき、2番目のジェネリックパラメータを保存できます。 –

+0

C#にはローカルクラスもないので、C#とまったく同じではありません。 –

+0

...クラス内のクラスと基本的にJavaクラスのクラスは異なります。 –

答えて

1

これは、Sunのjavacのバグである可能性があります。回答の可能な解決策を含むthis questionを参照してください。

+0

ヒントをありがとう! javacの既知のバグであることが判明しました。http://bugs.sun.com/view_bug.do?bug_id=6657499 – janko

関連する問題