首先请理解我可能有这个完全错误,这就是谷歌没有帮助的原因。 我正在尝试构造以下对象:M3Tools
public class M3UTrack {
private String path;
private int secondsDuration;
private String label;
//Get and set of these omitted
public M3UTrack()
{
path = null;
label = null;
secondsDuration = 0;
}
public M3UTrack(M3UTrack t)
{
// Creating a track as a duplicate of the track you pass it?
path = new String(t.getPath());
label = new String(t.getLabel());
secondsDuration = t.getSecondsDuration();
}
从我收集的内容,如果我要使用第二个构造函数,我将不得不传递一个自己的对象???它让我陷入困境。还有其他课程。
答案 0 :(得分:1)
M3UTrack(M3UTrack t)
是一个所谓的复制构造函数,因为它创建了一个新实例但复制了另一个实例的值。如果要创建第一个/新实例,可能会使用第一个版本。类和构造函数是公共的,所以没有什么可以阻止你编写
M3UTrack t = new M3UTrack(); // default constructor
t.setPath(...); t.setLabel(...); t.setDurationSeconds(10); // fill data
M3UTrack s = new M3UTrack(t); // sample usage of copy constructor
如果您遇到此问题,则需要向我们展示您的代码和错误消息。这是编译时或运行时错误?如果是堆栈跟踪,请告诉我们涉及哪些行号。
BTW:你可能想要添加另一个构造函数来指定所有必填字段,因此你不需要使用setter。这样做的好处是你永远不会有一半的"构造对象。当您省略setter时,您使用的是一个名为immutable object的模式:
public M3UTrack(String path, String label, int duration)
{
this.path = path;
this.label = label;
this.secondsDuration = duration;
}
然后构建它:
M3UTrack t = new M3UTrack("file.mp3", "Songs", 10/*sec*/);
答案 1 :(得分:0)
您可以完美地引用您正在定义的类的对象。如果没有,你怎么能create copy constructors?顺便说一句,这正是你在public M3UTrack(M3UTrack t)
所做的。
来自维基百科:
复制构造函数定义编译器执行的操作 复制类对象。复制构造函数有一个形式参数 这是类的类型(参数可能是对类的引用 对象)...
答案 2 :(得分:0)
从它看起来,你构建一个M3Track实例并在其上设置属性。如果要复制,则将给定的复制构造函数作为选项。
答案 3 :(得分:0)
此构造具有名称"复制构造函数"并用于特定位置。正常使用,没有参数construcror。
复制构造函数的使用,如名称所示,是"在"之间。两个对象(旧的和新的),似乎你的用例永远不会发生(抱歉拼写,这来自手机)
M3UTrack theNew = new M3UTrack(theOld)