簡體   English   中英

為什么我不能將SuperType添加到List <T> 哪里 <T extends SuperType> ?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM