簡體   English   中英

為什么在 Java (BlueJ) 中使用 ArrayList 作為構造函數參數?

[英]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.

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