有了泛型的好處就是在編繹期你的代碼就能被檢測(cè)出問(wèn)題來(lái)。
比如你有一個(gè)類是水果類class?Fruit{...}
然后你的代碼中把T全換成Fruit,那么以后你往ArrayList里面就只能加入Fruit及子類(如蘋果,梨等),不然會(huì)直接報(bào)錯(cuò)。也就是你告訴編繹器說(shuō):在我的這個(gè)容器里面我只要加水果類,如果我誤加了別的類(如鐵類,人類,球類)請(qǐng)馬上告訴我。
如下面源代碼,為什么前面要加上<T>呢?
privateListcashFutures(List> futures) {? ? ? ? Listvalues = new ArrayList();? ? ? ? for (Futurefuture : futures) {
try {
values.add(future.get());
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
return values;
}
這個(gè)方法返回值前也加個(gè)<T>的話,這個(gè)T就代表該方法自己獨(dú)有的某個(gè)類,而不去和類中限定的T產(chǎn)生沖突,直接換成<E>會(huì)更容易理解的。
示例:http://bbs.csdn.net/topics/390171178