当前位置: 首页 > 知识库问答 >
问题:

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

卜高超
2023-03-14

我正试图用BlueJ完成一项为uni完成的任务,但我在第一个障碍上遇到了障碍。

在赋值中,我们得到了一个类,以及该类的构造函数、方法和参数的名称。我们不允许更改这些,因为赋值部分地由测试单元标记(或类似的东西)。

该类的一个构造函数如下所示

 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
   }

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

(我想这样做肯定有好处(如果没有,功能就不会存在),但我不明白它是什么,如果有人能给我解释一下,我会非常感激的。)

共有1个答案

蓬英逸
2023-03-14

为什么他们使用arraylist作为构造函数的参数?

这样做是为了允许调用方在单个参数中传递任意数量的track

Java提供了几种实现这一点的选项:您可以传递集合、数组,甚至是迭代器。如果我要为构造函数设计签名,我强烈希望collection或者至少是list而不是arraylist,以便为调用方提供更多的选项,使他们可以将什么集合传递给我的构造函数。

回到如何处理数组列表,您应该制作一个它的防御性副本。一种方法是使用collections.copy,如下所示:

Collections.copy(this.tracks, tracks);

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

 类似资料:
  • 问题内容: 有谁知道为什么在Java Swing中将Vector用作构造函数参数:like ,尽管Vector被标记为过时的集合。(我也知道还有其他选择,但是使用Vector更为方便)。它与线程同步有关吗? 问题答案: 虽然既不作废也不作废,但它是原始作品的遗产;后来,它“经过改装以实现该接口”。 已同步,但是正确使用此功能以有效地依赖于实现细节。而是依靠其方法提供 事前发生 关系的类的 内存一致

  • 在BlueJ中,如果我编写了一个以数组为参数的方法,那么当我想用方法调用测试该方法时,我必须用花括号输入元素,所以: {1,2,3} 如何调用的方法? 下面是我的代码: 现在我想在BlueJ中测试它,我应该在下面的对话框中键入什么?

  • 问题内容: 我正在处理一个扩展的类。 这不是我的代码,它在开始构造GUI之前先进行调用。我想知道为什么要这样做,因为我一直只访问超类的方法而不必调用; 问题答案: 对于具有父级的所有类(这是Java中每个用户定义的类),都有一个不带参数的隐式调用,因此通常不需要显式调用。但是,如果父级的构造函数接受参数,并且你希望指定它们,则可以使用参数调用。此外,如果父级的构造函数接受参数,并且没有默认的无参数

  • 问题内容: 我是Java编程语言的初学者,最近我研究了 构造函数 不能在Java中继承,有人可以解释 为什么 吗? 问题答案: 简而言之,构造函数不能被继承,因为在子类中它具有​​不同的名称(子类的名称)。 您只能执行以下操作: 相反,方法是使用“相同名称”继承的,可以使用。 理由如下:继承构造函数没有多大意义,因为类A的构造函数意味着创建类型A的对象,而类B的构造函数意味着创建类B的对象。 不过

  • 当Java中给出参数构造函数时,为什么默认的无参数构造函数会失败? 这个设计有什么意义? 例如: