我正试图用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
作为构造函数的参数?这样做有什么好处?
(我想这样做肯定有好处(如果没有,功能就不会存在),但我不明白它是什么,如果有人能给我解释一下,我会非常感激的。)
为什么他们使用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中给出参数构造函数时,为什么默认的无参数构造函数会失败? 这个设计有什么意义? 例如: