[英]Why use an ArrayList as a constructor parameter in Java (BlueJ)?
我正在嘗試在 BlueJ 中為大學完成一項任務,但我在第一個障礙上遇到了障礙。
在賦值中,我們得到一個類,以及該類的構造函數、方法和參數的名稱。 我們不允許更改這些,因為分配部分由測試單元(或類似的東西)標記。
此類的構造函數之一給出為
public class PlayList
{
public PlayList(String name, ArrayList<Track> tracks) {
}
我已經(部分)完成了它
public class PlayList
{
private String listName;
private ArrayList<Track> listTracks = new ArrayList<Track>();
/**
* Constructs a playlist with a title and an ArrayList of tracks
*
* @param name The name of the playlist
* @param tracks An ArrayList of tracks in the playlist
*/
public PlayList(String name, ArrayList<Track> tracks) {
listName = name;
//I really don't know what to do with the tracks parameter yet
}
好的,所以,我從這個問題( 如何在 BlueJ 中為 ArrayList 輸入參數? )知道我必須創建一個 ArrayList 的實例才能將它作為參數在 BlueJ 中傳遞。
我不明白的是為什么- 為什么他們使用ArrayList<Track>
作為構造函數的參數? 這樣做有什么好處?
(我認為這樣做肯定有好處(如果沒有功能一開始就不存在),但我不明白它是什么,如果有人可以向我解釋,我將不勝感激。)
為什么他們使用
ArrayList<Track>
作為構造函數的參數?
他們這樣做是為了允許調用者在單個參數中傳遞任意數量的Track
。
Java 提供了多種選項來執行此操作:您可以傳遞一個集合、一個數組,甚至一個迭代器。 如果我正在為構造函數設計一個簽名,我會非常喜歡Collection<Track>
或至少一個List<Track>
到ArrayList<Track>
,以便為調用者提供更多選擇,因為他們可以傳遞給我的構造函數的集合.
回到如何處理數組列表,您應該制作它的防御性副本。 一種方法是使用Collections.copy
,如下所示:
Collections.copy(this.tracks, tracks);
復制完成后,您應該遍歷this.track
元素,並確保它們不為null
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.