为什么在 Java (BlueJ) 中使用 ArrayList 作为构造函数参数?
Why use an ArrayList as a constructor parameter in Java (BlueJ)?
我正在尝试在 BlueJ 中完成 uni 的作业,但在第一个障碍时遇到了障碍。
在赋值中,我们得到了一个class,以及那个class的构造函数、方法和参数的名称。我们不允许更改这些,因为作业部分由测试单元(或类似的东西)标记。
此 class 的构造函数之一给出为
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
。
Java 提供了几个选项来执行此操作:您可以传递一个集合、一个数组,甚至一个迭代器。如果我正在为构造函数设计签名,我强烈希望 Collection<Track>
或至少 List<Track>
而不是 ArrayList<Track>
,以便为调用者提供更多选项,让他们可以传递什么集合给我的构造函数。
回到如何处理数组列表,您应该制作一个防御性副本。一种方法是使用 Collections.copy
,像这样:
Collections.copy(this.tracks, tracks);
复制完成后,您应该遍历 this.track
的元素,并确保它们不是 null
。
我正在尝试在 BlueJ 中完成 uni 的作业,但在第一个障碍时遇到了障碍。
在赋值中,我们得到了一个class,以及那个class的构造函数、方法和参数的名称。我们不允许更改这些,因为作业部分由测试单元(或类似的东西)标记。
此 class 的构造函数之一给出为
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
。
Java 提供了几个选项来执行此操作:您可以传递一个集合、一个数组,甚至一个迭代器。如果我正在为构造函数设计签名,我强烈希望 Collection<Track>
或至少 List<Track>
而不是 ArrayList<Track>
,以便为调用者提供更多选项,让他们可以传递什么集合给我的构造函数。
回到如何处理数组列表,您应该制作一个防御性副本。一种方法是使用 Collections.copy
,像这样:
Collections.copy(this.tracks, tracks);
复制完成后,您应该遍历 this.track
的元素,并确保它们不是 null
。