2016-02-16 66 views
-4

我已經看到了在Java中的很多次構造類似於:在Java中調用< and >之間的術語是什麼?

List <String> myList = Arrays.asList("element1","element2","element3"); 

Map<Integer, String> map; 

現在我想知道這是什麼<String>或<>跡象正在做什麼。或者特別是它的名稱,以便我可以搜索它。所有搜索我之前已經完成了操作。那麼有人可以告訴我這是如何被稱爲?

+3

「Java Generics」<---在Google中鍵入該關鍵字 –

+1

它被稱爲「模板參數」 – EpicPandaForce

+0

*上面的代碼是否與此類似?*不,絕對不是! – user2004685

回答

3

<>稱爲鑽石操作員。聲明類型變量,例如使用它的<E>並傳遞reference types。尋找JLS 4.4節Type Variables

List接口聲明瞭一個類型變量E<>鑽石運營商。

public interface List<E> extends Collection<E>

當你做List <String> myList你實際上傳遞參考類型或類型參數的E

當您在右側遇到空的<>時,Java會推斷出=運算符左側的任何類型參數。

您可以像使用像<String>這樣的鑽石運算符將字符串類型傳遞給E來理解它。這是不正確的,因爲仿製藥使用類型擦除。你可以發送任何類型。只要它符合類型變量E

因爲它變成了一個String對象列表。 如果發送<Object>比它變成對象列表。

+0

小心。 IIRC Diamond操作符是Java7 +自動引用實際類型的可能性,而不是類型參數。在Java7之前,你必須做「列表 list = new LinkedList 」,在7之後你可以推斷出右手,並執行「列表 list = new LinkedList <>」。 –

+0

我同意在右側Java推斷左側的任何類型參數。 – abcdef12

1

的Java支持泛型類型的概念。

這些類型具有共同的行爲,不管它們的類型參數是什麼。

例如,查看列表集合。 List是元素的順序集合,Integer的List與Strings的List不同,但基本邏輯是相同的。

所以不是有兩種不同類型的ListOfInteger和ListOfString,Java有一個列表類型,與一類參數指定什麼元素

所以<和>之間的術語叫做類型參數的類型,而List是一個泛型類型。

相關問題