0

BooFooの2つのクラスがあり、 Fooの各インスタンスに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

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?

于 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);

元の質問に戻りましょう。コンストラクターからセッターを呼び出さないようにアドバイスされたのは、「コンストラクターには副作用がない」という考えに基づいていたと思います。この場合、新しいNameオブジェクトの一部となる新しいオブジェクトをStudent作成しているので、オブジェクトを初期化するために必要な呼び出しを行うのが完全に適切です。

Nameただし、のコンストラクターを呼び出すよりも、なぜこれを好むのかわかりません。行が少なくなり、すべてが成功するか失敗するかのどちらかです。

于 2012-08-05T13:23:26.923 に答える
0

はい、できます。何の問題もありません。

編集:

コードのコメントを解除します。あなたのゲッター/セッターは大丈夫です。

于 2012-08-05T12:55:29.157 に答える