package org.apache.wicket.examples.guestbook;
import java.util.Date;
import org.apache.wicket.IClusterable;
public class Comment implements IClusterable {
private String text;
private Date date = new Date();
public Comment() {
}
public Comment(final Comment comment) {
this.text = comment.text;
this.date = comment.date;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String toString() {
return "[Comment date = " + date + ", text = " + text + "]";
}
}
为什么其他的construtor会在这里?
为什么Comment comment
被声明为final
?
答案 0 :(得分:6)
final
您的案例中有可选项。在某些项目/公司中,有一条规则,即所有方法和构造函数参数都被声明为final。
我们的想法是,您不应该为comment
变量赋予另一个值。
关于第一个问题(“为什么其他的construtor在这里做?”):这个构造函数是一个所谓的“复制构造函数”。它获取现有注释并创建具有相同内容的新实例。
答案 1 :(得分:1)
有两个构造函数:一个用于初始化给定Comment对象的日期和文本,另一个用于使成员未初始化(因此需要使用setter来初始化它们)。
final 限定符对构造函数的调用者完全没有影响。它仅声明方法实现不为参数引用分配新值。请注意,即使它确实如此,调用者也不会意识到它,因为java总是按值传递参数。
我怀疑这个拷贝构造函数模式的来源是C ++,其中 const 可以用来防止修改另一个对象的状态。使用java的 final ,情况并非如此。您可以自由修改参数的数据成员。
答案 2 :(得分:0)
这是java中的final keyword。除非您为final Comment comment
分配新值,否则不会给出任何错误
答案 3 :(得分:0)
其他构造函数用于在使用等效参数传递对象时初始化对象,并使用final以便以后在代码中无法更改。