java - 为什么在 Java (BlueJ) 中使用 ArrayList 作为构造函数参数?

标签 java arraylist parameters constructor 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
   }

好吧,所以,我从这个问题( How do I enter parameters for an ArrayList in BlueJ? )中知道我必须创建 ArrayList 的实例才能将其作为 BlueJ 中的参数传递。

我不明白的是为什么 - 他们为什么使用 ArrayList<Track>作为构造函数的参数?这样做有什么好处?

(我认为这样做一定有好处(如果没有的话,该功能一开始就不存在),但我不明白它是什么,如果有人能给我解释一下,我将不胜感激。)

最佳答案

why have they used ArrayList<Track> as a parameter for the constructor?

他们这样做是为了允许调用者传递任意数量的 Track s 在单个参数中。

Java 提供了多种选项来执行此操作:您可以传递集合、数组,甚至迭代器。如果我为构造函数设计签名,我强烈推荐 Collection<Track>或至少一个List<Track>ArrayList<Track> ,以便为调用者提供更多选择,让他们可以将哪些集合传递给我的构造函数。

回到如何处理数组列表,您应该为其创建一个防御性副本。一种方法是使用 Collections.copy ,像这样:

Collections.copy(this.tracks, tracks);

复制完成后,您应该浏览 this.track 的元素,并确保它们不是 null .

关于java - 为什么在 Java (BlueJ) 中使用 ArrayList 作为构造函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32920334/

相关文章:

java - Jersey MOXy 接受同一资源的单个 JSON 值和数组

java - 检查数组列表中的两个对象是否相等

java - 如何随机选择多个对象之一添加到数组列表中?

parameters - 如何在方法中完全指定返回参数的类型?

java - Jackson 映射到 POJO 无法反序列化实例实例

java - 等到重绘组件完成

java - Java Netbeans 程序中的不同结果

arrays - 将数组传递给 Swift 中的函数抛出无效参数类型错误

python - 如何将列表作为参数传递给方法

java - SSL_read 第二次失败