gpt4 book ai didi

java - 类需要自己构造自己

转载 作者:行者123 更新时间:2023-12-01 11:02:57 25 4
gpt4 key购买 nike

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

根据我收集的信息,如果我要使用第二个构造函数,我将必须传递一个自身的对象???这让我陷入了困境。还涉及其他类。

最佳答案

M3UTrack(M3UTrack t) 是所谓的复制构造函数,因为它创建一个新实例,但复制另一个实例的值。如果您想创建第一个/新实例,您可能会使用第一个版本。类和构造函数是公共(public)的,因此没有什么可以阻止您编写

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

如果您遇到问题,您需要向我们展示您的代码和错误消息。这是编译时错误还是运行时错误?如果它是堆栈跟踪,请还告诉我们涉及哪些行号。

顺便说一句:您可能想要添加另一个构造函数来指定所有必填字段,因此您不需要使用 setter 。这样做的好处是你永远不会有“一半”的构造对象。当您省略 setter 时,您将使用一种称为不可变对象(immutable对象)的模式:

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*/);

关于java - 类需要自己构造自己,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33202087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com