[英]Why can't I add SuperType to List<T> where <T extends SuperType>?
同
public class SuperType {
}
和
public class TestClass<T extends SuperType > {
public void doSomething() {
List<T> list = new ArrayList<T>();
list.add(new SuperType ()); // ERROR
}
}
它不會編譯,給我
類型List中的方法add(T)不適用於參數(SuperType)
但為什么?
假設你有
public class SuperType {
}
public class SubType extends SuperType {
}
並使用TestClass<SubType>
您的代碼變為
public class TestClass<SubType> {
public void doSomething() {
List<SubType> list = new ArrayList<SubType>();
list.add(new SuperType ());
}
}
這必須是錯誤的,因為new SuperType()
不夠具體。 它必須至少是一個SubType
。
該類型僅適用於SuperType
子類,而不適用於SuperType
本身。 而是使用
List<SuperType> list = new ArrayList<SuperType>();
list.add(new SuperType ());
你應該有一些符合以下條件的東西 -
SuperType無法通過方法調用轉換轉換為T.
在實現中使用類型聲明的含義無效。
當你說-
T extends SuperType
您實際上是在說該參數可以是SuperType或SuperType的任何子類型。
應該-
List<SuperType> list = new ArrayList<SuperType>();
類型僅用於表示它可以是什么類型,在您的情況下,它可以是任何類型,它是SuperType和Supertype本身的子類。
謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.