簡體   English   中英

方法簽名中的參數化列表

[英]Parameterized Lists in method signature

類似於以下內容不會給我編譯時或運行時錯誤,並且我為原因畫了一個空白。 有沒有辦法在對cls.add的調用上強制執行編譯錯誤?

為什么不將類定義中T的定義傳遞給內部方法的調用? 我知道我沒有以這種方式實例化該類,但是該類的定義指出T必須是一個數字。

public class NewClass<T extends Number> {

    private List<T> id = new ArrayList<T>();

    public void add(List<T> elem) {
        id.addAll(elem);
    }

    public static void main(String[] args) {
        NewClass cls = new NewClass();
        cls.add(new ArrayList<String>());
    }
}

您正在使用原始類型。 在這種情況下,所有類型信息都將被忽略,並且您會得到警告。

如果提供類型參數,它將失敗:

NewClass<Integer> cls = new NewClass<Integer>();
cls.add(new ArrayList<String>()); //error

實例化cls時,需要提供通用類型,例如:

NewClass<Integer> cls = new NewClass<Integer>();

這將導致警告,因為在這種情況下將禁用泛型的使用(您使用的是原始類型)。 那是出於向后兼容的原因。 您可以使編譯器將警告視為錯誤: Javac:將警告視為錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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