2013-01-12 69 views
7

मुझे एक ArleList में कोई आइटम जोड़ते समय एक NullPointerException प्राप्त हो रहा है IF ArrayList को फ़ील्ड के रूप में प्रारंभ नहीं किया गया है। क्या कोई समझा सकता है क्यों?जावा: क्षेत्र या निर्माता में ArrayList शुरू करें?

काम करता है जब मैं एक क्षेत्र के रूप में ArrayList प्रारंभ:

public class GroceryBill { 

private String clerkName; 
private ArrayList<Item> itemsInGroceryList = new ArrayList<Item>(); 

private double total; 

//Constructs a grocery bill object for the given clerk 
public GroceryBill(Employee Clerk) { 

    this.clerkName = Clerk.getEmployeeName(); 
    this.total = 0.0; 

} 

public void add(Item i) { 

    itemsInGroceryList.add(i); 
} 

} 

काम नहीं करता है जब मैं एक क्षेत्र के रूप में ArrayList की घोषणा तो क्लास निर्माता में यह प्रारंभ:

public class GroceryBill { 

private String clerkName; 
private ArrayList<Item> itemsInGroceryList; 

private double total; 

//Constructs a grocery bill object for the given clerk 
public GroceryBill(Employee Clerk) { 

    this.clerkName = Clerk.getEmployeeName(); 
    this.total = 0.0; 
    ArrayList<Item> itemsInGroceryList = new ArrayList<Item>(); 

} 

public void add(Item i) { 

    itemsInGroceryList.add(i); 
} 

} 
+1

ऐसा करें जब

आप ताकि आप सदस्य चर को संदर्भित कर रहे हैं निर्माता में प्रकार घोषणा से छुटकारा पाने की जरूरत है इंस्टेंस वैरिएबल को स्वयं घोषित करना, और आप इसे 'अंतिम' बना सकते हैं, क्योंकि आपने कभी इसे ओवरराइट नहीं किया है। – fge

उत्तर

11

संस्करण क्योंकि कन्स्ट्रक्टर में एक नया चर बना रहा है जो आपके सदस्य फ़ील्ड के समान ही होता है, और सदस्य फ़ील्ड सेट नहीं रहता है। इसे परिवर्तनीय छाया के रूप में जाना जाता है, जहां नव निर्मित चर सदस्य सदस्य को छाया/छुपा रहा है।

public GroceryBill(Employee Clerk) { 
    itemsInGroceryList = new ArrayList<Item>(); 
} 

तुम भी स्पष्ट हो सकता है और का उपयोग this कर सकते हैं::

public GroceryBill(Employee Clerk) { 
    this.itemsInGroceryList = new ArrayList<Item>(); 
} 
+4

+1 - यह पहचानने के लिए कि यह छायांकित है (नहीं * "mak [ing] वैरिएबल की एक स्थानीय प्रतिलिपि" * जो एक शब्दावली दृष्टिकोण से गैरकानूनी है ...) –