2013-08-01 55 views
2

我目前是使用Java的新手。到目前爲止,我已經能夠很容易地使用基本的,如我的JavaScript和PHP的知識,如Classes,Functions,Arrays等。Java中的<>做什麼

但是,我從未見過的是:<>。裏面是某種類型的變量。因爲我不知道它叫什麼,我找不到任何答案。

我見過他們這樣的:

List<String> myList = new ArrayList<String>(); 

也喜歡:

public static <T> boolean contains(final T[] array, final T v) { 
    for (final T e : array) 
     if (e == v || v != null && v.equals(e)) 
      return true; 

    return false; 
} 

什麼是<String>是什麼意思? 在函數中,我也想知道T的特別之處是什麼?

+0

搜索「java generic」。 – johnchen902

+0

查看http://stackoverflow.com/questions/11891567/what-does-do-in-java?rq=1 – jarmod

+0

在發佈任何問題前搜索與此相關的內容 – MGPJ

回答

5

這是一個Generic type

什麼,它允許你做的是通過一個類型,使之成爲多個對象類型有用

所以List是一個通用的集合,它允許你創建任何對象的列表。製作List<String>將使對象成爲一個字符串列表。或者你可以使用List<MyClassType>,它會使你的類的對象列表

2

定義對象的Type集合可容納

所以當你寫List<String> myList = new ArrayList<String>();,這意味着

  • 創建,可容納String對象的ArrayList。

    SomeParameterizedClass { T someValue; }

意味着你可以將你的類型傳遞給類,例如SomeParameterizedClass<String>以便someValue變成String

當您編寫List<T> list = new ArrayList<T>();時,這裏的T可以是任何類型。

用java 7你可以簡單地說List<String> list = new ArrayList<>();。它有相同的意思。

在Java 7中<>被稱爲鑽石運營商

+0

請問您可以告訴我downvote的原因是什麼? –

+0

在最後一行中是否指'List <> list = new ArrayList <>();'? – Shawn31313

+0

不,最後一行是正確的'List list = new ArrayList <>();'。應該有些東西可以告訴它可以採用什麼樣的對象:)。這種菱形語法不需要改變意義就可以減少打字量 –

0

你會發現在下列情況下< >中,T是純英文「參數類型」,這意味着你可以「替代」是t通過任何其它非原始型(如StringInteger):

  • 當您聲明一個參數類型:

    class MyParameterizedClass<T> { 
    
        public T myValue; 
    
    } 
    
  • 當你declari您的參數化類型的NG變量:

    MyParameterizedClass<String> myStringParam; 
    MyParameterizedClass<Integer> myIntegerParam; 
    
  • 當您使用參數化類型的構造函數:

    MyParameterizedClass<String> myStringParam = new MyParameterizedClass<String>(); 
    MyParameterizedClass<Integer> myIntegerParam = new MyParameterizedClass<Integer>(); 
    
    myStringParam.myValue = "Hello world"; 
    myIntegerParam.myValue = 5; 
    
  • 在聲明泛型方法:

    public <T> T updateMyValue(T myValue) { 
        this.myValue = myValue 
    } 
    
0

什麼你觀察到的是部分正確的!在Java中,<>應該是'Object'類型或'Object'的任何子類型。

當你聲明myList中如下:

List<String> myList = new ArrayList<String>(),它保證了聲明和初始化myList中只有字符串類型的元素。這被稱爲類型聲明。

public static <T> boolean contains(final T[] array, final T v) { }是一個泛型方法聲明,它暗示傳遞的兩個參數應該是相同的對象類型,第一個參數是數組,第二個參數是對象。而方法返回類型也應該是相同的類型。

有關泛型的更多示例,請參閱Java文檔。 http://docs.oracle.com/javase/tutorial/extra/generics/methods.html

相關問題