簡體   English   中英

<>在Java中做什么

[英]What does <> do in Java

我目前剛開始使用Java。 到目前為止,我已經能夠從JavaScript和PHP的知識中輕松地使用基Classes ,如ClassesFunctionsArrays等。

但是,我從未見過的是: <> 其中包含某種類型的變量。 因為我不知道它叫什么,我找不到任何答案。

我見過他們是這樣的:

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特別之處是什么?

這是通用類型

它允許您做的是傳遞一個類型,並使其對多種對象類型有用

因此,List是一個通用集合,它使您可以列出任何對象。 使List<String>使對象成為字符串列表。 或者你可以使用List<MyClassType> ,它會列出你的類的對象

它定義了集合可以容納的對象的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中, <>被稱為菱形運算符

在下列情況下你會發現<>,T是一個簡單英語的“參數類型”,這意味着你可以用任何其他非基本類型(如StringInteger )“替換”該T:

  • 當您聲明參數化類型時:

     class MyParameterizedClass<T> { public T myValue; } 
  • 當您聲明參數化類型的變量時:

     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 } 

你觀察到的是部分正確的! 在Java中,<>內部應為“對象”類型或“對象”的任何子類類型。

當您聲明myList如下:

List<String> myList = new ArrayList<String>() ,它確保聲明和初始化的myList只包含String類型的元素。 這稱為類型聲明。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM