循環(huán)語(yǔ)句的增強(qiáng)
之前類(lèi)似這樣的語(yǔ)句:
void cancelAll(Collection c) { for (Iterator i = c.iterator(); i.hasNext(); ) { TimerTask tt = (TimerTask) i.next(); tt.cancel(); } } |
以后可以這樣寫(xiě):
void cancelAll(Collection c) { for (Object o : c) ((TimerTask)o).cancel(); } |
有時(shí)候我們可能寫(xiě)出這樣的代碼:
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())); |
這段代碼不會(huì)按照我們?cè)O(shè)想的那么工作,因?yàn)槊看蔚诙€(gè)for語(yǔ)句的執(zhí)行都會(huì)引發(fā)i.next()的執(zhí)行,實(shí)際上我們沒(méi)有達(dá)到對(duì)i進(jìn)行遍歷的目的,而且可能會(huì)引起一個(gè)NoSuchElementException異常。
解決的一個(gè)辦法是改寫(xiě)成如下代碼:
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語(yǔ)言的新特性,我們可以這樣寫(xiě):
for (Suit suit : suits) for (Rank rank : ranks) sortedDeck.add(new Card(suit, rank)); |
這段代碼是不是很漂亮?