1. 程式人生 > 實用技巧 >jdk5.0的新特性

jdk5.0的新特性

在JDK 1.5的beta階段,我們為BEA的Java IDE開發了一個Java 5編譯器。因為我們實現了許多新特性,所以人們開始以新的方式利用它們;有些用法很聰明,而有些用法明顯應該被列入禁用清單。編譯器本身使用了新的語言特性,所以我們也獲得了使用這些特性維護程式碼的直接體驗。

增強的for迴圈
  為了迭代集合和陣列,增強的for迴圈提供了一個簡單、相容的語法。有兩點值得一提:

Init表示式
  在迴圈中,初始化表示式只計算一次。這意味著您通常可以移除一個變數宣告。在這個例子中,我們必須建立一個整型陣列來儲存computeNumbers()的結果,以防止每一次迴圈都重新計算該方法。您可以看到,下面的程式碼要比上面的程式碼整潔一些,並且沒有洩露變數numbers:
未增強的For: int sum = 0; Integer[] numbers = computeNumbers(); for (int i=0; i < numbers.length ; i++) sum += numbers[i]; 增強後的For: int sum = 0; for ( int number: computeNumbers() ) sum += number;
侷限性
有時需要在迭代期間訪問迭代器或下標,看起來增強的for迴圈應該允許該操作,但事實上不是這樣,請看下面的例子:
for (int i=0; i < numbers.length ; i++) { if (i != 0) System.out.print(","); System.out.print(numbers[i]); }

  我們希望將陣列中的值列印為一個用逗號分隔的清單。我們需要知道目前是否是第一項,以便確定是否應該列印逗號。使用增強的for迴圈是無法獲知這種資訊的。我們需要自己保留一個下標或一個布林值來指示是否經過了第一項。   這是另一個例子:

for (Iterator<integer> it = n.iterator() ; it.hasNext() ; ) if (it.next() < 0) it.remove();

  在此例中,我們想從整數集合中刪除負數項。為此,需要對迭代器呼叫一個方法,但是當使用增強的for 迴圈時,迭代器對我們來說是看不到的。因此,我們只能使用Java 5之前版本的迭代方法。   順便說一下,這裡需要注意的是,由於Iterator是泛型,所以其宣告是Iterator<Integer>。許多人都忘記了這一點而使用了Iterator的原始格式。