爲什麼增強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循環 - JAVA
- 7. ArrayIndexOutOfBounds增強for循環
- 8. For循環未執行
- 9. python for循環未執行
- 10. 循環變量增強的for循環
- 11. 爲什麼這個for循環進入無限循環執行?
- 12. 檢查裏面的循環未執行
- 13. 循環通過枚舉值沒有增強的for循環
- 14. 將增強型for循環轉換爲循環常規
- 15. for-each循環未執行的可能原因是什麼?
- 16. For循環增值通過
- 17. 爲什麼'for(;;)'循環?
- 18. 增強for循環遍歷Java
- 19. 增強for循環不工作
- 20. 增強的for循環錯誤
- 21. 末迭代增強的for循環
- 22. for循環未正確執行
- 23. 爲什麼這個for循環執行「else」代碼塊?
- 24. 爲什麼save方法只在for循環中執行一次?
- 25. 爲什麼這個for循環永遠不會執行?
- 26. 在for循環中執行查詢
- 27. 爲什麼不執行循環?
- 28. 爲什麼不執行此循環?
- 29. For循環檢查值是否相等
- 30. 轉換增強的for循環用於循環
你可以指定你的代碼,你在做什麼,一些細節? – 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