2011-12-16 33 views
1

http://docs.oracle.com/javase/tutorial/java/generics/genmethods.html 從那裏 -通用方法,多括號,類型

引用了更現實的使用泛型方法可能會像下面這樣,它定義了充塞引用單個項目到多個靜態方法框:

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

}

在這裏,這是什麼List<Box<U>>呢?這個怎麼用?

此外,

要使用這個方法,你的代碼看起來像下面這樣:

Crayon red = ...; 
List<Box<Crayon>> crayonBoxes = ...; 

The complete syntax for invoking this method is: 

Box.<Crayon>fillBoxes(red, crayonBoxes); 

我無法理解這一切。

+0

我不知道你有什麼不明白。你能說你的特異性不知道,所以我們可以回答你的問題嗎? – 2011-12-16 12:43:57

回答

1

列表是一個通用的集合。 框是另一個通用的。

你可以聲明Box<Crayon>構建蠟筆

List<Box>的盒是盒的集合,但盒子是通用的,需要一個類型爲箱體List<Box<Crayon>>

只需遵循泛型類型U. FillBoxes方法是靜態的public static <U> void fillBoxes(U u, List<Box<U>> boxes)。靜態方法不需要實例,如果沒有實例不能聲明方框Box<Crayon>的類型,則必須在方法Box.<Crayon>fillBoxes的調用中傳遞該類型,知道該類型,編譯器才知道FillBoxes(U u)中的第一個參數是蠟筆類型,第二個參數是蠟筆盒列表(List<Box<U>> boxes)。

的方法,將填補蠟筆盒的用紅色蠟筆:)

UFFF這是很難的非Java程序員和非英語母語者名單...

1

List<Box<U>>只是意味着它是一個盒子列表,您可以在其中存儲U型對象。

例如,如果您有類「蠟筆」,「鉛筆」,「筆」等實現界面「U」,您可以將其實例存儲在這些框中。

3

你可以覺得你作爲一個類型或接口的一種佔位符。 如果你有一個Foo類,並用Foo替換了方法聲明中的所有U,它將使用Foo和一個List>的實例。 正如名稱「Generic」所說,它是一種通用的方式,用實際類型「替換」泛型類型參數U.這樣你可以強制每個使用Type U對象的人也必須使用List>來調用該方法。 以foo的例子,我只能叫

public static <U> void fillBoxes(U u, List<Box<U>> boxes) { 

Foo foo = new Foo(); 
List<Box<Foo>> fooList = new ArrayList<Box<Foo>>(); 
fillBoxes(foo, fooList);