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