在Java中,你可以为另一个类的构造函数中的一个类调用一个setter吗?

时间:2012-08-05 12:52:18

标签: java constructor setter getter

如果您有两个类 Boo Foo ,并且 Foo 的每个实例都包含 Boo ,您可以在 Foo 构造函数中包含 Boo 中的私有属性 Setter 吗?

4 个答案:

答案 0 :(得分:1)

是的,绝对的。你为什么不能这样做?

class Boo {
    private String name;

    public void setName(String name) {
        this.name = name;
    }
}

class Foo {
    private final Boo boo;

    public Foo() {
        boo = new Boo();
        boo.setName("boo");
    }
}

你问这个问题的事实表明你认为可能会出错< - 你有什么特别的想法?

答案 1 :(得分:1)

更好的答案是自己尝试一下。

在这种情况下测试和查看结果并不难。

如果不这样做,你还能学会如何编程吗?

答案 2 :(得分:0)

是的,你可以。我看不出任何问题。

编辑:

取消注释您的代码。你的getter / setter就好了。

答案 3 :(得分:0)

我在新代码中看到的问题是:

    this.name = new Name();
    Name.setFirstName(firstName);
    Name.setLastName(lastName);

Name是一个类名。为了使Name.setFirstName()成为有效的通话,setFirstName()必须是Name中的静态方法。据推测,它是一种实例方法。您需要为该类的特定实例调用它,在本例中为this.name引用的实例。所以正确的代码是:

    this.name = new Name();
    this.name.setFirstName(firstName);
    this.name.setLastName(lastName);

回到你原来的问题 - 我的猜测是你给出的不是从你的构造函数中调用setter的建议是基于“构造函数不应该有副作用”的想法。在这种情况下,您构建一个全新的Name对象作为新Student的一部分,因此最适合进行初始化对象所需的任何调用。

但是,我不明白为什么你更喜欢这个来调用Name的构造函数。更少的线条,整个事情要么成功要么不成功。