将值传递给Constructor

时间:2010-12-21 08:18:29

标签: java

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

4 个答案:

答案 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以便以后在代码中无法更改。