0

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

4

4 回答 4

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");
    }
}

您提出这个问题的事实表明您认为可能会出错 - 您特别想到了什么?

于 2012-08-05T12:54:50.670 回答
1

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

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

如果不这样做,您还能如何学习编程?

于 2012-08-05T12:56:02.540 回答
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对象作为 new 的一部分Student,因此进行初始化对象所需的任何调用都是非常合适的。

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

于 2012-08-05T13:23:26.923 回答
0

是的你可以。我看不出有什么问题。

编辑:

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

于 2012-08-05T12:55:29.157 回答