0

我只是担心直接调用方法的增强 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

4 回答 4

1

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

增强的 for 循环将通过NullPointerExceptionif 方法返回null

于 2013-08-12T18:30:51.843 回答
1

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

如果我不是所有者,我更喜欢使用不同的构造

for(整数 i : 保证集合(resultList())
{
// 做东西
}
公共静态 <T> Collection<T> 保证Collection(Collection<T> c)
{
    返回 c != null ?c : Collections.EMPTY_LIST;
}

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

于 2013-08-12T18:39:08.570 回答
0

这取决于您的系统设计:

许多项目目标避免空对象。

如果您确定它returnList()永远不会返回null(它应该返回一个空列表(或Collections.emptyList),然后选择解决方案 1,否则选择 2。

于 2013-08-12T18:44:29.563 回答
-2

好吧,如果您正在处理NullpointerException以防万一,那么我更喜欢使用选项 1,因为我们在堆栈上创建了一个额外的变量“列表”,这将占用一些内存,也会降低一些性能。

于 2013-08-12T18:36:00.417 回答