我只关心增强的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可以减少不必要的新变量声明,从而减少混乱。
但是, 总的来说。
答案 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>这会占用一些内存也会使性能降低一些。