gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:46:17 24 4
gpt4 key购买 nike

我正尝试在 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
}

好的,所以,我从这个问题 (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/

24 4 0