为什么增强for循环在迭代集合之前未执行空值检查。为什么增强for循环未执行空值检查
回答
如果你的意思是,这会去的一声:
int[] array = null;
for (int x : array) {
}
...那么我认为这是完全恰当,要抛出一个NullPointerException
。另一种方法是让它静静地吞下null,然后把它当作一个空数组。这不是Java在其他地方采用的方法 - 为什么这应该与众不同?这会使语言不一致。
的一个地方,我希望能有为多处理(但显式处理)被接通枚举 - 这将是很好能够为空提供的情况下,为避免事先检查是一个特殊的价值。但这是一个非常不同的结构,它专门针对不同的价值观采取不同的行动。
用于切换枚举的'null'情况是一个有趣的想法,但是如果你有一个'default:'但没有明确的'case null:',并且枚举值是'null',会发生什么。如果'null'转到违反向后兼容性的默认情况,并且如果'null'是错误的值则不好。如果你得到一个NPE,那么'default'的行为就会在语义上不一致。 (它现在意味着“默认除非它为空......”) – 2010-10-21 06:20:30
@Stephen C:好问题。我不确定引入它现在是否是一个好主意,但是我认为当功能第一次被引入时我们会很高兴。 – 2010-10-21 06:22:30
我认为,即使那样(假设)它已经是一个糟糕的主意了,但还是有足够的“皱纹”。也许如果Java 1.0也有可空的tyoes ... – 2010-10-21 06:33:31
我有点害怕对Jon Skeet说:... | ... 但是,什么是地狱......你怎么看待这个情况?:
`
findMoney(List<Places> places){
int money = 0;
for(Place place : places){
money += searchWithCare(place);
}
return money;
}
`
如果我问一些客户告诉我去哪里找他什么都没告诉我。你认为在这里抛出NullPointerException更好吗?可能是管理对这个方法的调用,所以如果参数为空不调用它?... 我认为返回0是一致的响应,因为没有错误在这里。我相信异常是用来管理代码流的,我不明白为什么我应该在这种情况下改变流程。返回一个cero或甚至一个null可能是一个很好的回应,不是吗?
那么这个解决方案呢? `
findMoney(List<Places> places){
int money = 0;
for(Place place : places == null ?Collections.<Place>emptyList():places){
money += searchWithCare(place);
}
return money;
}
`
这真的很有帮助。我从来没有见过'集合。
我试图找到它!我不能......这是一个秘密? :)对不起 – 2014-07-03 11:51:28
唉,谢谢你无论如何尝试。这是很难找到的亲属。 – 2014-07-03 13:45:10
的代码必须是这样的:
for (AnyObject anyObject : checkIsEmpty(anyObjectList)) {
System.out.println(anyObject.doSomething());
}
private <T> Iterable<T> checkIsEmpty(Iterable<T> iterable) {
return iterable == null ? Collections.<T>emptyList() : iterable;
}
- 1. 空值检查增强for循环
- 2. 增强for循环未执行
- 3. 增强for循环
- 4. 为什么不执行for循环?
- 5. 为什么for循环没有执行?
- 6. 为什么for循环不执行?
- 7. 为什么while循环从未执行?
- 8. 增强for循环 - JAVA
- 9. ArrayIndexOutOfBounds增强for循环
- 10. For循环未执行
- 11. For循环未执行
- 12. For循环未执行
- 13. python for循环未执行
- 14. 循环变量增强的for循环
- 15. For循环内循环未执行
- 16. 平均循环,for循环未执行
- 17. 从增强型for循环转换为for循环
- 18. 为什么这个for循环进入无限循环执行?
- 19. 为什么数组元素未在增强for循环中初始化?
- 20. 检查里面的循环未执行
- 21. 循环通过枚举值没有增强的for循环
- 22. 我想通过增强for循环动态值在SQL查询?
- 23. 将增强型for循环转换为循环常规
- 24. for-each循环未执行的可能原因是什么?
- 25. For循环增值通过
- 26. 为什么for循环
- 27. 为什么'for(;;)'循环?
- 28. 检查for循环
- 29. 增强的for循环错误
- 30. Java增强for循环和IndexOutOfBoundsException?
你可以指定你的代码,你在做什么,一些细节? – 2010-10-21 05:50:47
我想这个问题是关于为什么'为(X y:(列表)null){...}'抛出一个NPE ... –
2010-10-21 05:53:11
重复http://stackoverflow.com/questions/2250031 – 2011-02-16 21:50:14