簡體   English   中英

Java ArrayList聲明

[英]Java ArrayList declarations

我目前正在攻讀Java OCA考試,並遇到了一個與ArrayList聲明有關的問題。

以下哪項有效?:

 1. ArrayList al1 = new ArrayList(); 2. ArrayList al2 = new ArrayList<>(); 3. ArrayList<> al3 = new ArrayList<>(); 4. ArrayList<Double> al4 = new ArrayList<>(); 5. ArrayList<Double> al5 = new ArrayList<Float>(); 

根據我的書,答案1,2和4是有效的。 答案3和5無效。

但是,沒有給出適當的解釋。 它所做的就是顯示聲明ArrayList的標准方法:

ArrayList<E> al3 = new ArrayList<E>();

並且提到聲明沒有通用部分的ArrayList也是有效的。

我也無法在網上找到關於這個主題的好文章。 有人可以解釋(或指向一篇好文章的方向)上面的不同排列嗎?

提前致謝。

1在所有Java版本中都有效

在這里,您在不使用泛型的情況下聲明ArrayList。 這意味着無論你添加到arraylist中的是什么,當你將它取回時它將是Object類型並且需要轉換為類型。 這是在Java 1.4(pre generics)中使用Collections的舊方法,並且支持向后兼容性。 現在你應該總是使用泛型。


2和4僅在Java 7中有效

空括號:<>是Java7的新類型推斷,這意味着您不必兩次指定類型。 注意Java7 ,它不適用於舊版本。

所以在Java7中

ArrayList<Double> al4 = new ArrayList<>();

是相同的

ArrayList<Double> al4 = new ArrayList<Double>();

此鏈接有關於類型推斷的更多信息: http//docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html


3無效,因為如果使用泛型,則必須在變量聲明中指定類型。


5是無效的,因為如果您聲明一個類型為Double的List,則無法為其指定一個類型為Float的List,您只能為其指定一個Double類型的列表。

所以這是有效的:

ArrayList<Double> al5 = new ArrayList<Double>();

2以下only in Java SE7有效。 Java SE7允許類型推斷,因此您無需再次在<>內提供類型。

  ArrayList<Double> al4 = new ArrayList<>();
  ArrayList al2 = new ArrayList<>();

另一方面,下面一個在all Java versionsall Java versions有效; 這是為了確保非通用代碼的向后兼容性。

ArrayList al1 = new ArrayList();

由於Collection of Float不是Double的集合的子類型,因此不允許使用以下內容。 而且Float不是Double的子類型; 所以毫無疑問它是一個有效的聲明。 請注意,即使數組版本也無法編譯。

 Double[] dd = new Float[5];  //won't compile
 ArrayList<Double> al5 = new ArrayList<Float>(); //won't compile

下面的一個不是有效的聲明。

ArrayList<> al3 = new ArrayList<>();

暫無
暫無

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

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