2015-03-17 4 views
1

Не уверенный относительно того, что должно быть помещено в конструктор, и что должно быть просто полем, я замечаю, что вы можете добавлять вещи, которые нужно инициализировать, без необходимости быть в конструкторе. Вот два примера: я просто не уверен в том, что лучше всего использовать, и о причинах этого.Путаница 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. Но оба работают нормально. Каков наилучший вариант и причина для этого?

+1

Как создается экземпляр '' CustomerDetails customer''' в первом примере? –

+0

Ваш первый пример даст вам «NullPointerException». –

+0

Что вы имеете в виду? клиент CustomerDetails не делает клиентом объект, поэтому он был создан? –

ответ

1

Что вы передаете в конструктор в качестве параметра уже сделано в другом классе как объект, такой как

CustomerDetails customerInConstructor = new CustomerDetails(); 

Тогда вы могли бы пойти

PurchaseOrder purchase = new PurchaseOrder(customerInConstructor, otherParameters) 

Если вы не хотите пройти в объекте, созданном вами из предыдущего класса, и вместо этого создайте новый для другого класса, вы можете просто сделать для него переменную, как показано в первом примере.

private CustomerDetails customer; 

Конструкторы прежде всего способы взять переменные из других классов, как ваш основной класс и использовать эти переменные, чтобы методы, которые затрагивают их или добавлять вещи к ним. Надеюсь, я помог, хорошо провел день!

+0

Ahh okay, поэтому в моем случае я хочу использовать объект клиента, поэтому я могу использовать методы в классе CustomerDetails. Но я действительно не хочу передавать объект в этот класс. Так мой первый пример был бы лучше? считается ли это хорошей практикой? –

+0

Да, первый пример был бы лучше, потому что вам не нужно передавать его, как вы сказали. Сделать его переменной будет лучше, потому что вы можете использовать методы классов, но не забудьте передать нужные параметры при создании объекта из класса CustomerDetails и при вызове его методов. Удачи и приятного времяпровождения! – Raheel138

Смежные вопросы