簡體   English   中英

對下界通配符使用增強的for循環

[英]Using enhanced for loop with lower bounded wildcard

我有這個循環:

for (int j = 0; j < list.size(); j++) {
    System.out.print(list.get(j) + " ");
}

該方法的簽名是:

public static void addNumbers(List<? super Number> anoList)

該列表聲明為:

static List<? super Number> list2;

要么

static List list2;

對於這個問題。

到目前為止一切都很好。 但是隨后Netbeans給出了將for循環轉換為增強的for循環的提示。 當我申請時,我得到:

    for (? super Number anoList1 : anoList) {
        System.out.print(anoList1 + " ");
    }

這是行不通的,並且會產生很多錯誤。 對於一個: cannot find anoList1. expected . expected : expected ; expected ; expected

我嘗試了幾種方法來消除錯誤,但是沒有一個起作用。

編寫此enhanced for loop的正確方法是什么?

從我閱讀過的其他主題中,建議不要完全使用enhanced for loop並保持原樣。

編寫此增強的for循環的正確方法是什么?

for (Object obj : anyList) {...}

由於List<? super Number> List<? super Number>是元素的List,它可以是Number任何超類型(包括Object ),我們對List實際類型的唯一保證是Object

在這里? super Number ? super Number表示列表可以包含Number超類型的任何類型的元素。 實際上,這意味着除了列表元素類型是Object類型的后代之外,不能保證任何其他內容。 這種方法簽名實際上看起來毫無用處。 可能您想使用

public static void addNumbers(List<? extends Number> anoList)

這意味着列表元素類型是Number某些子類型 ,例如List<Integer>List<Double>

我是塔吉爾(Tagir)給出的答案。 您會看到它不會編譯

public static void addNumbers(List<? super Number> anoList){
    for(Number n : anoList){ // Fail

    }
}

與失敗

Error:(29, 24) java: incompatible types: capture#1 of ? super java.lang.Number cannot be converted to java.lang.Number

但這很好

public static void addNumbers(List<? extends Number> anoList){
    for(Number n : anoList){

    }
}

因此,正如塔吉爾(Tagir)所提到的,您可能要使用extends而不是super 但是,如果您確實需要? super Number ? super Number ,那么Radiodef的答案是增強的for循環的唯一選擇。

暫無
暫無

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

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