2009-08-20 47 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的上面的代碼是完全正常的,但1.6.0_11的javac似乎覺得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 ',並保存在第二個泛型參數中。 – 2009-08-20 09:14:11

+0

由於C#甚至沒有本地類,它絕對不是在C#中。 – 2009-08-20 09:21:41

+0

...類中的類與Java中的類基本不同。 – 2009-08-20 09:22:18

回答

1

這可能是Sun的javac中的一個錯誤,請參閱this question其中包含答案中的可能解決方案。

+0

謝謝你的提示!原來,這是一個已知的javac錯誤:http://bugs.sun.com/view_bug.do?bug_id=6657499 – janko 2009-08-20 11:15:16

相關問題