循環語句的增強
之前類似這樣的語句:
void cancelAll(Collection c) { for (Iterator i = c.iterator(); i.hasNext(); ) { TimerTask tt = (TimerTask) i.next(); tt.cancel(); } } |
以后可以這樣寫:
void cancelAll(Collection c) { for (Object o : c) ((TimerTask)o).cancel(); } |
有時候我們可能寫出這樣的代碼:
List suits = ...; List ranks = ...; List sortedDeck = new ArrayList(); for (Iterator i = suits.iterator(); i.hasNext(); ) for (Iterator j = ranks.iterator(); j.hasNext(); ) sortedDeck.add(new Card(i.next(), j.next())); |
這段代碼不會按照我們設想的那么工作,因為每次第二個for語句的執行都會引發i.next()的執行,實際上我們沒有達到對i進行遍歷的目的,而且可能會引起一個NoSuchElementException異常。
解決的一個辦法是改寫成如下代碼:
for (Iterator i = suits.iterator(); i.hasNext(); ) { Suit suit = (Suit) i.next(); for (Iterator j = ranks.iterator(); j.hasNext(); ) sortedDeck.add(new Card(suit, j.next())); } |
利用java語言的新特性,我們可以這樣寫:
for (Suit suit : suits) for (Rank rank : ranks) sortedDeck.add(new Card(suit, rank)); |
這段代碼是不是很漂亮?