1

最初のコード例を次に示します。

public class MyClass {
  List<MyObject> list = new ArrayList<MyObject>();

  public MyClass(MyObject something) {
     getStuff(something ,list)
  }

  private void getStuff(MyObject obj, List<MyObject> list) {
    //do something here and mutate the list
    list.add(MyObject);
  }
}

このプライベート メソッドは、リストを変更するため、眉をひそめられましたが、その理由を正確に理解できませんでした。これを行う他の方法は知っていますが、なぜこれが悪い/間違っているのか知りたかっただけです。

4

1 に答える 1

7

私がこれについて間違っていると思うことの 1 つは、最小の驚きの原則に違反していることです。return... somethinggetStuffの代わりに void を返すという名前のメソッドがあります。また、クラスの内部状態も変化しますが、これは驚くべき動作です。という名前のメソッドがおそらくそのリストを返すと思います。getStuff

また、この行:

list.add(MyObject);

次のようにする必要があります。

list.add(obj);

何かあれば。クラスではなく、インスタンスを追加する必要があります。

于 2013-10-09T21:58:29.817 に答える