初始化外部构造函数与内部构造函数

Initilizing outside constructor vs inside

我想知道是否应该在构造函数内部或外部初始化 ArrayList,如下所示。这两种方式有什么区别吗?如果没有,您认为业内最common/best的做法是什么?

正在构造函数中初始化变量:

public class Customer {
    private String name;
    private ArrayList<Double> transactions;

    public Customer(String name, double initialAmount) {
        this.name = name;
        this.transactions = new ArrayList<Double>();
    }

    public void addTransaction(double amount) {
        this.transactions.add(amount); // autoboxing
    }
}

对外面:

public class Customer {
    private String name;
    private ArrayList<Double> transactions = new ArrayList<Double>();

    public Customer(String name, double initialAmount) {
        this.name = name;
    }

    public void addTransaction(double amount) {
        this.transactions.add(amount); // autoboxing
    }
}

两种方法没有区别。如果您在 activity 或片段 class 中工作,那么最好在 onCreate 中初始化一个变量。在这种情况下,在构造函数之外初始化它的唯一好处是,如果在调用 onCreate 之前需要加载其他函数。

但在class的情况下,则没有区别是编码器的偏好。

在构造函数中初始化一个变量是更好的做法,也更常见。在构造函数外部声明所有变量并在内部初始化它们。假设要在Customer class 中初始化名为cart 的数组的大小。每个客户肯定不会购买与其他客户相同数量的商品。如果你这样写 class:

public class Customer {
    private String name;
    private Item[] cart=new Item[5];

    public Customer(String name) {
        this.name = name;
    }

}

那么您已经将所有位顾客的购买数量设置为5。 另一方面,通过这样写 class:

public class Customer {
        private String name;
        private Item[] cart;

        public Customer(String name,int size) {
            this.name = name;
            cart=new Item[size];
        }
    }

根据传递给构造函数中的参数 size 的内容,此实现确保每个客户都有自己的特定大小的购物车。