Не уверенный относительно того, что должно быть помещено в конструктор, и что должно быть просто полем, я замечаю, что вы можете добавлять вещи, которые нужно инициализировать, без необходимости быть в конструкторе. Вот два примера: я просто не уверен в том, что лучше всего использовать, и о причинах этого.Путаница Java-конструктора, что происходит?
Пример 1:
public class PurchaseOrder {
private String date;
private String customerID;
private String productCode;
private int quantity;
private int discountRate;
private int pricePerUnit;
private CustomerDetails customer; // The part that I'm changing
public PurchaseOrder(OrderDate date, String id,
Product product, int quantity) {
this.discountRate = customer.getDiscountRate();
this.date = date.getDate();
this.customerID = customer.getCustomerID();
this.productCode = product.getProductCode();
this.quantity = quantity;
this.pricePerUnit = product.getPricePerUnit();
}
Пример 2:
public class PurchaseOrder {
private String date;
private String customerID;
private String productCode;
private int quantity;
private int discountRate;
private int pricePerUnit;
public PurchaseOrder(OrderDate date, CustomerDetails customer,
Product product, int quantity) {
this.discountRate = customer.getDiscountRate();
this.date = date.getDate();
this.customerID = customer.getCustomerID();
this.productCode = product.getProductCode();
this.quantity = quantity;
this.pricePerUnit = product.getPricePerUnit();
}
Обратите внимание, что я могу поставить клиента CustomerDetails в конструкторе или просто иметь его в качестве переменной. Если это в конструкторе, это означает, что если объект сделан из этого класса, он также должен содержать информацию CustomerDetails. Но оба работают нормально. Каков наилучший вариант и причина для этого?
Как создается экземпляр '' CustomerDetails customer''' в первом примере? –
Ваш первый пример даст вам «NullPointerException». –
Что вы имеете в виду? клиент CustomerDetails не делает клиентом объект, поэтому он был создан? –