增強for 迴圈(enhanced for loop)
所謂“增強for 迴圈”,主要也是針對容器的。使用該項特性時,開發人員可以將“利用iterator
遍曆容器”的邏輯交給編譯器來處理。例如下列代碼:
void cancelAll(Collection c) {
for (Iterator i = c.iterator(); i.hasNext(); ) {
TimerTask tt = (TimerTask) i.next();
tt.cancel();
}
}
可以用增強for 迴圈改寫為:
void cancelAll(Collection c) {
for (Object o : c)
((TimerTask)o).close();
}
編譯器判斷對象c 是一個Collection 子物件(即是容器)之後,就會允許使用增強for 迴圈
形式,並自動取到c 的迭代器,自動遍曆c 中的每個元素。
可以看到,上面的代碼中仍然有一個強制類型轉換(((TimerTask)o).close();)。實際上,這
項特性應該普遍地與泛型結合,以獲得最大的利益。結合泛型之後,上述代碼變成:
void cancelAll(Collection c) {
for (TimerTask task : c)
task.cancel();
}
public enum LogLevel {
VERBOSE(2, "verbose", 'V'), //$NON-NLS-1$
DEBUG(3, "debug", 'D'), //$NON-NLS-1$
INFO(4, "info", 'I'), //$NON-NLS-1$
WARN(5, "warn", 'W'), //$NON-NLS-1$
ERROR(6, "error", 'E'), //$NON-NLS-1$
ASSERT(7, "assert", 'A'); //$NON-NLS-1$
private int mPriorityLevel;
private String mStringValue;
private char mPriorityLetter;
LogLevel(int intPriority, String stringValue, char priorityChar) {
mPriorityLevel = intPriority;
mStringValue = stringValue;
mPriorityLetter = priorityChar;
}
/**
* Circular buffer containing the logcat output. This is unfiltered.
* The valid content goes from <code>mBufferStart</code> to
* <code>mBufferEnd - 1</code>. Therefore its number of item is
* <code>mBufferEnd - mBufferStart</code>.
*/
private LogMessage mKernerMsg = new LogMessage();
/*
* this below inherited from log.java
*/
/**
* Returns the {@link LogLevel} enum matching the specified letter.
* @param letter the letter matching a <code>LogLevel</code> enum
* @return a <code>LogLevel</code> object or <code>null</code> if no match were found.
*/
public static LogLevel getByLetter(char letter) {
for (LogLevel mode : values()) {
if (mode.mPriorityLetter == letter) {
return mode;
}
}
return null;
}
怎麼理解這個values ?