在方法中初始化Arraylist
问题描述:
以下问题。我有大量的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
}}}}}}
答
你可以这样说: 而不是通常在构造函数初始化它(如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
}}}}}}
答
你不能调用传递给方法的变量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”
说实话有什么不对您注释掉2行。 – vikingsteve
@vikingsteve我甚至会认为这是一个很好的做法 – itwasntme