2011-05-18 61 views
4

好吧,所以我需要幫助理解的東西。我瞭解「?:」如何一起使用,但是閱讀了一些Java開始的東西,我發現這種情況在幾個地方出現。最近是這樣...什麼是「:」在這個初學java程序中使用泛型?

public static <U> void fillBoxes(U u, List<Box<U>> boxes) { 
    for (Box<U> box : boxes) { 
     box.add(u); 
    } 
} 

我很困惑的是什麼「:」在做什麼。任何幫助,將不勝感激。我正在看Oracle示例頁面上的示例:http://download.oracle.com/javase/tutorial/java/generics/genmethods.html

回答

5

這是Java的for-each循環構造。它與泛型沒有任何關係,或者:不適用於泛型。簡寫如下:for every type box in the collection named boxes do the following...

這是link to the official documentation

簡單的代碼示例:(而不是執行int數組的總和管理泛型)

int[] intArray = {1,5,9,3,5}; 
int sum = 0; 
for (int i : intArray) sum += i; 
System.out.println(sum); 

輸出:23

+0

太感謝了,送我正確的方向。 – CrazyGrunt 2011-05-18 02:26:46

+1

+1。只是想補充一點,當我向自己讀取代碼時(正如您在答案中所做的那樣),我喜歡將「:」視爲「in」。 – 2011-05-18 02:45:56

+0

@Ian:我實際上會拋出一個C#示例,顯示in關鍵字...更好地放置在這裏,但不要混淆答案。 C#版本:'foreach(int i in collection_of_ints){/ * do stuff * /}' – 2011-05-18 02:52:13

2

這就是for循環的「foreach」形式。它是獲取集合上的迭代器並迭代整個集合的語法糖。

這是一個快捷方式寫一樣的東西:

for (Iterator<Box<U>> it = boxes.iterator(); it.hasNext();) { 
    Box<U> box = it.next(); 
    box.add(u); 
} 

更多看到this Oracle page其中特別談到了「foreach」循環。

1

它用於遍歷容器,在該案例列表。它爲boxes變量中的每個對象執行一次循環。

1

這是在Java 1.5中添加的增強型for-each循環,可以有效地通過集合元素進行迭代。

進一步詳細說明可在Java文檔指南itself.http://download.oracle.com/javase/1.5.0/docs/guide/language/foreach.html