如果增强的for循环包括返回列表的函数

时间:2013-08-12 18:29:31

标签: java for-loop

我只关心增强的for循环直接调用方法。 嵌套在代码中的是我用大写字母的问题:

public class ExtendedForLoop {

    public static List<Integer> returnList() {
        System.out.println("Hurray ----> ");
        List<Integer> abc = new ArrayList<Integer>();
        abc.add(5);
        abc.add(10);
        abc.add(20);
        return abc;
    }

    public static void main(String args[]) {
        for (Integer i : returnList()) { // <----- OPTION 1. Include function call in extended loop.
            System.out.println(i);
        }

        List<Integer> list  = returnList()
        for (Integer i : list) { // <----- OPTION 2. Provide list to function call.
            System.out.println(i);
        }
    }
}

我更喜欢选项2,因为可以处理一些例外。 但是,如果没有预期的异常,那么选项1可以减少不必要的新变量声明,从而减少混乱。

但是, 总的来说。

  1. 首选哪个选项?
  2. 如果是option2并且选择option2的唯一原因是处理异常,那么如果没有预期的异常我们应该使用option1吗?

4 个答案:

答案 0 :(得分:1)

我认为使用null检查的第二种方法更安全。

如果方法返回NullPointerException

增强for循环将通过null

答案 1 :(得分:1)

如果我是返回列表的代码的所有者,我更喜欢使用选项1,并且可以保证永远不会返回null。

如果我不是主人,我更喜欢使用不同的构造

for(Integer i : guaranteeCollection(resultList())
{
// dostuff
}
public static <T> Collection<T> guaranteeCollection(Collection<T> c)
{
    return c != null ? c : Collections.EMPTY_LIST;
}

这可以避免在代码中创建不必要的变量声明并阻止NPE。

答案 2 :(得分:0)

这取决于您的系统设计:

许多项目目标都避免使用空对象。

如果您确定returnList()将永远不会返回null(它应该返回一个空列表(或Collections.emptyList),那么请转到解决方案1,另一个明智地转为2. / p>

答案 3 :(得分:-2)

如果你正在处理 NullpointerException ,那么我更喜欢使用选项1,因为我们在堆栈<上创建额外变量“列表” / strong>这会占用一些内存也会使性能降低一些。