看看這三個類。 Minatchi允許自己擴展,以便其方法的返回類型也可以擴展。爲了說明,我使用了一種靜態方法。Java泛型擴展返回類型的方法
public class Minatchi<T extends Minatchi<?>>{
static public <T extends Minatchi<?>>
List<T> listAll(){
return
(List<T>) query();
}
}
於是我繼承Minatchi到夫人
public class Lady
extends Minatchi<Lady>{
}
這是可疑的行爲發生。
public class HelloMinatchi{
private void listA(){
List<Lady> uvs = Lady.listAll();
for (Lady uv: uvs){
logger.info(uv.getName());
}
}
private void listB(){
for (Lady uv: Lady.listAll()){
logger.info(uv.getName());
}
}
}
方法listA和listB基本相同。 listA將列表放入中間變量uvs, 而列表B直接將listAll放入for-loop標頭。
但是,對於listB,編譯器抱怨無法將Minatchi <?>轉換爲Lady。
所以這個問題是關於Java泛型的設計完整性。還有另一種泛型抱怨。
這是一個故意的設計功能還是Java通用設計人員不知道如何解決的無意設計錯誤。如果有意爲之,他們爲什麼這樣做?如果有錯誤,他們是否打算解決它?
或者這是我個人的問題,我不知道更好的方式來聲明泛型?如果是這樣,告訴我如何。
(我使用的通用Minatchi類,因爲我已非靜態方法暴露於類擴展過,這是我在這個問題排除在外。)
我使用了一個通用的Minatchi類,因爲我有非靜態方法也暴露給類擴展,我忽略了題。 – 2010-01-14 13:17:07