我在看一些代碼,使這種形式:混淆Java泛型使用:我如何正確地參數化這個?
1 package com.stackoverflow.java.questions;
2 import java.util.ArrayList;
3 import java.util.List;
4 public class B extends A<B> {
5
6 private
7 <C extends A>
8 List<C> getList(Class<C> cls) {
9
10 List<C> res = new ArrayList<C>();
// "snip"... some stuff happening in here, using cls
11 return res;
12 }
13 public
14 List<A> getList() {
15 return getList(A.class);
16 }
17 }
18 abstract class A<C extends A<C>> {
19 }
是的,我知道這是醜陋的,但我降低它,就像我可以管理。
我的問題是我如何正確地參數化第7,14和15行上的A的使用?
目前,我從Eclipse獲得第7行和第14行的警告(A是原始類型,對泛型類型A的引用應該參數化)。我懷疑當我修復其他行時,我會得到第15行的一個兩個,但我不確定。無論哪種方式,它目前沒有參數化,可能應該是,但我不知道語法應該是什麼。
有關如何添加適當的參數語義和語法以擺脫這些警告的任何想法?
注:我不確定A是否是遞歸泛型是否重要。如果我簡單地使用「抽象類A {}」來代替當前的定義,我仍然會得到相同的警告。
老實說,如果它是我自己的代碼,我會把它全部改成簡單得多。不幸的是,它是API的一部分,所以我試圖儘可能少地改變它。
謝謝!
UPDATE:
我能夠通過參數它們正如人們所期望解決的警告,但在錯誤的成本。歸根結底,我如何從一個抽象類中獲得類< A <B> >?
喜歡的東西,
類<甲<乙> > CLS =的A.class;
但是,這會導致類型不匹配錯誤。
UPDATE,第2部分:
事實證明,雅只是不能做它因類型擦除。見我的其他問題here.
+1行號 – basszero 2010-03-08 14:07:09