我想知道在Java中定义构造函数的正确方法。 这可能不是一个很好的问题,但仍然可以在这里提出。
假设我有这门课程:
public class Element {
private String value;
private Date timestamp;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public Date getTimestamp() {
return timestamp;
}
public void setTimestamp(Date timestamp) {
this.timestamp = timestamp;
}
public Element(String value, Date timestamp) {
this.value = value;
this.timestamp = timestamp;
}
}
我可以使用setter定义构造函数吗?
public Element(String value, Date timestamp) {
setValue(value);
setTimestamp(timestamp);
}
哪个更好的设计?第一个似乎是标准,我也一直在使用它。
答案 0 :(得分:0)
假设我们在setter中定义了一个约束。
public class Person {
private int weight = 0;
public Person(int weight) {
this.weight = weight;
}
public void setWeight(int weight) {
if(weight > 200) throw new IllegalArgumentException("Weight unreasonable");
this.weight = weight;
}
}
现在,使用setter,我们可以为类引入过滤器,逻辑或行为。一个人的重量不得超过200.但是使用构造函数时,不应用权重规则。你可以new Person(10000)
因此,为了保护对象的行为,它建议在设置成员变量的值时在构造函数中使用setter。
public Person(int weight) {
setWeight(weight);
}
因此,构造函数不会破坏weight
答案 1 :(得分:-1)
是。您可以通过这种方式定义构造函数。我已经使用swing(JButtons等)完成了几次,并且它完美地工作了。这是组织代码的一种巧妙方式 - 特别是如果你要验证任何一个参数。
此外,它可能有助于继承,你只需要覆盖设置者并使用超级课程'构造
所以,至少在我看来,第二种设计更好。
你的问题非常合理!