要求自己构建自己的类

时间:2015-10-18 19:12:30

标签: java class object constructor

首先请理解我可能有这个完全错误,这就是谷歌没有帮助的原因。 我正在尝试构造以下对象: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();    
    }

从我收集的内容,如果我要使用第二个构造函数,我将不得不传递一个自己的对象???它让我陷入困境。还有其他课程。

4 个答案:

答案 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)

相关问题