1

ねえ皆さん、配列リストの初期化について簡単な質問があります

これは私がやっているコードのほんの一部です

public class OrderManager {
    ArrayList<Order>orders = new ArrayList<Order>();
    public OrderManager() {

    }

    public OrderManager(ArrayList<Order> orders) {
        orders = new ArrayList<Order>();
    }

変数の注文を使用してから、orders = new正しいと宣言しますか? それとも、これは 2 つの異なるインスタンスになり、何かを追加しようとしても機能しませんか?

それとも、OrderManager が arraylist を取得するので、それは理にかなっていますか?

まだテストしていません。このコードを書き始めたばかりで、リストに適切に追加できなかった前にこの問題に遭遇し、これに似たエラーが原因であると信じていました。で開始する。

4

3 に答える 3

3
public class OrderManager {
    private ArrayList<Order>orders;
    public OrderManager() {
      this(new ArrayList<>());//call constructor
    }

    public OrderManager(ArrayList<Order> orders) {
        this.orders = orders;
    }
  .
  .
   //more methods here for example getters and/or setters for orders
}

これが正しい方法です。また、将来、このクラスを変更する必要がないなどの理由で使用しListたくArrayListない場合は、使用することを検討してください。インターフェイスの概念へのプログラミング。ArrayListLinkedList

したがって、クラスは次のようになります。

    public class OrderManager {
        private final List<Order>orders;

        public OrderManager() {
          this(new ArrayList<>());//call constructor or doing nothing is another option
        }

        public OrderManager(List<Order> orders) {
            this.orders = orders;
        }


       public List<Order> getOrders(){
           return orders;
       }    

       public void addOrder(Order order){
            orders.add(order);
       }
  }
于 2013-09-18T18:42:01.053 に答える
0

2 番目のコンストラクターが間違っています。

そのはず:

public OrderManager(ArrayList<Order> orders) {
        this.orders = orders;
    }

コンストラクターは、新しいオブジェクトを作成し、そのクラス変数を初期化するために使用されるものです。

使用するときnewは、クラス コンストラクターを呼び出しています。

あるコンストラクターを別のコンストラクターから呼び出すことができる場合があります。これは、呼び出しコンストラクターがより大きな変数セットを初期化し、他のコンストラクターを使用してサブセットを初期化するときに行われます (同じコードを繰り返さないようにするため)。そのような場合はthis、適切な署名を使用します。

于 2013-09-18T18:43:33.090 に答える