2

コンストラクターで現在初期化されているクラスがprivate List<String> children;ありますが、これは必ずしも必要ではなく、他の関数が必要とする場合にのみ初期化したいと思います。

重要なのは、多くのコードを変更せずに現在の実装を作り直すことです。

私は他の言語でそれを行う方法を知っていますが、Javaの知識は今のところかなり限られています。

4

3 に答える 3

4

それを詳しく説明すると、これはそれを達成する1つの方法です。

public class Whatever 
{
    private List<String> children;

    public List<String> getChildren
    {
        if ( children == null ) { children = new ArrayList<String>(); }
        return children;
    }
    ...
}

また、例えば書くことを忘れないでください。フィールドに直接アクセスするのではなくaddChild( String child )、'erの観点から。getそして、あなたが本当に妄想的であるか、スレッド化された環境にいて、作成に長い時間がかかる場合は、ブロックを作成することをお勧めします synchronized

于 2012-12-10T13:08:21.313 に答える
3

childrennullの場合は、ゲッターで作成できます。適切な同期に注意してください。children作成に費用がかからず、大量のインスタンスを作成しない場合は、熱心に作成してください。手間を省きます。

于 2012-12-10T13:03:38.503 に答える
0

これは、Java Beanの悪名高いゲッターとセッターであるアクセサー・メソッドの背後にあるデータ転送オブジェクトのメンバー変数を非表示にするJavaの一般的な方法です。これを行うと、 `List getChildren()メソッドに任意のロジック(最初の呼び出しでリストを作成する、外部クライアントに可換リストを返すなど)を追加できます。

于 2012-12-10T13:04:34.583 に答える