使用通配符類只會導致警告。但是,什麼是錯用這種方法,我得到編譯器錯誤」 ...不能從類SubclassX轉換爲類將類指定爲泛型屬性
public static <T extends Superclass> void createInstance(Class<T> param) {
if (param == null) {
if (whatever) {
param = Subclass1.class; // Comp-Error
} else if (whatever2) {
param = Subclass2.class; // Comp-Error
} else {
// Error
}
}
}
編輯: 只是可以肯定,Subclass1和Subclass2正在擴大超類。
當該方法被調用時,「T」應該是「Superclass」的某個特定子類(在編譯時不知道)「。編譯器無法知道「T」將會與「Subclass1」或「Subclass2」兼容。 – khelwood
@khelwood:我添加了一個編輯。你的答案仍然正確嗎?我相信,編譯器知道,'Subclass1繼承了Superclass {}'。 – Sammy
如果編譯器確定'T'是'Subclass1',則只能將'Class'變量賦值給'Subclass1.class'。但它不會,因爲'T'可能是'Superclass'的任何子類。 –
khelwood