BooとFooの2つのクラスがあり、 Fooの各インスタンスにBooのインスタンスが含まれている場合、Fooのコンストラクター内に含まれるBooのプライベート属性のSetterを使用できますか?
4 に答える
そのとおり。なぜあなたはできないのですか?
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");
}
}
あなたが質問をするという事実は、あなたがうまくいかないかもしれないと思う何かがあることを示唆しています-あなたは特に何を考えていましたか?
A better answer is to try it out yourself.
It is not hard to test and see the results in this case.
How else can your learn how to program if not by doing it?
私があなたの新しいコードで見る問題はここにあります:
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);
元の質問に戻りましょう。コンストラクターからセッターを呼び出さないようにアドバイスされたのは、「コンストラクターには副作用がない」という考えに基づいていたと思います。この場合、新しいName
オブジェクトの一部となる新しいオブジェクトをStudent
作成しているので、オブジェクトを初期化するために必要な呼び出しを行うのが完全に適切です。
Name
ただし、のコンストラクターを呼び出すよりも、なぜこれを好むのかわかりません。行が少なくなり、すべてが成功するか失敗するかのどちらかです。
はい、できます。何の問題もありません。
編集:
コードのコメントを解除します。あなたのゲッター/セッターは大丈夫です。