[英]Is it required to clarify generic parameter on initialization of generic variable in java?
看,我們知道在編譯時,泛型類已轉換為原始形式,因此
List<String> a=new Arraylist<String>
實際上是相同的
List<String> a=new Arraylist<>
我對嗎? 是否確實需要在右側指定菱形內的類型?
您可能需要查看有關該主題的Oracle官方文檔 。
正如您所猜測的那樣,從Java 7開始,沒有必要指定類型,只要它可以由context明顯地推斷出來即可 。 引用最相關的部分:
Java SE 7支持通用實例創建的有限類型推斷。 如果構造函數的參數化類型在上下文中很明顯,則只能使用類型推斷。 例如,以下示例無法編譯:
List<String> list = new ArrayList<>(); list.add("A"); // The following statement should fail since addAll expects // Collection<? extends String> list.addAll(new ArrayList<>());
編輯: 有關類型推斷的更全面的Oracle教程 ,最新的Java 8增強功能。
從Java 7開始,您無需在實例化部分指定類型。 對於return語句也同樣適用。 它從返回類型隱式獲取。
<>
稱為Diamond Operator
。 Diamond運算符通過讓編譯器為泛型類的構造函數推斷參數類型,從而減少了Java泛型周圍的冗長程度。 換句話說,由於Java 7,沒有必要在菱形運算符內部指定類型。
您在這里混合了一些東西。
我們知道在編譯時,泛型類會轉換為原始形式
基本上是真的,這稱為類型擦除。
List<String> a=new Arraylist<String>
對於List<String> a=new Arraylist<>
實際上是相同的
從類型擦除的意義上講。 簡而言之,在編譯時,將List<String> a=new Arraylist<String>
更改為List a=new Arraylist
您提出的示例是Java 7的一項新功能。您可以省略賦值右側的泛型參數,而只需使用所謂的“鑽石運算符”即可。 這就是您的陳述正確的地方。 在Java 7之前,您不能執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.