2015-05-29 62 views
0

以下问题。我有大量的ArrayList attributes(基本上和Kreuzlagerort20kg等一样)。我不想在构造函数中初始化它们(部分注释掉),而是希望在fillLager()方法中初始化它们,从而可以在构造函数中调用方法,并将它们初始化并填充。如果我在代码中执行它,我总是会得到一个nullpointerexception。在方法中初始化Arraylist

是否有可能和/或明智地初始化一个方法内的数组列表,而不会获得所谓的空指针?

import java.util.ArrayList; 
public class Lager { 
private ArrayList<Screws> KreuzLagerort20kg,KreuzLagerort50kg; 

public Lager(){ 
     //KreuzLagerort20kg = new ArrayList<Screws>(); 
     //KreuzLagerort50kg = new ArrayList<Screws>(); 

     fillLager(1,KreuzLagerort20kg,20); 
     fillLager(1,KreuzLagerort50kg,50); 
} 

public void fillLager(int typ,ArrayList<Screws> lager,double lagerGewicht){ 

    lager = new ArrayList<Screws>(); 

    // code that loops through combinations and adds them to the arraylist 
    }}}}}} 
+2

说实话有什么不对您注释掉2行。 – vikingsteve

+1

@vikingsteve我甚至会认为这是一个很好的做法 – itwasntme

回答

0

你可以这样说: 而不是通常在构造函数初始化它(如KreuzLagerort20kg = new ArrayList<Screws>();),你这样做的fillLager。

import java.util.ArrayList; 
public class Lager { 
private ArrayList<Screws> KreuzLagerort20kg,KreuzLagerort50kg; 

public Lager(){ 
     //KreuzLagerort20kg = new ArrayList<Screws>(); 
     //KreuzLagerort50kg = new ArrayList<Screws>(); 

     fillLager(1, 20); 
     fillLager(1, 50); 
} 

public void fillLager(int typ, int code){ 
    if (code==20){ 
     KreuzLagerort20kg = new ArrayList<Screws>(); 
    } 
    if (code==50){ 
     KreuzLagerort50kg = new ArrayList<Screws>(); 
    } 


    // code that loops through combinations and adds them to the arraylist 
    }}}}}} 
1

你不能调用传递给方法的变量new,仍然有调用方法指的是原来的变量,如Java经过参考。当你调用新的X()时,有一个新的引用,调用另一个方法的方法将不知道该变量现在指向另一个引用...

public void methodA() { 
    String s = new String("AAAAA"); 
    methodB(s); 
    System.out.println(s); 
} 

public void methodB(String referredString) { 
    referredString = new String("BBBBB"); 
} 

调用methodA将打印“AAAAA”

您需要在构造函数初始化,或使该方法返回你传递的变量...

public void methodA() { 
    String s = new String("AAAAA"); 
    s = methodB(s); 
    System.out.println(s); 
} 

public String methodB(String referredString) { 
    referredString = new String("BBBBB"); 
    return referredString ; 
} 

调用methodA会现在打印“BBBBB”

或者 - 使字符串在任一方法之外声明,并且根本不传递它...例如

String s = new String("AAAAA"); 
public void methodA() { 
    methodB(); 
    System.out.println(s); 
} 

public void methodB() { 
    s = new String("BBBBB"); 
} 

也将产生“BBBBB”