繁体   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