在方法中初始化 Arraylist
Initialize Arraylist in method
以下问题。我有大量的 ArrayList attributes
(与 Kreuzlagerort20kg
等基本相同)。我不想在构造函数中初始化它们(注释掉的部分),而是喜欢在 fillLager()
方法中初始化它们,这样就可以在构造函数中调用方法,然后初始化并填充它们。如果我在代码中这样做,我总是会得到一个 nullpointerexception。
是否有可能 and/or 在方法内初始化数组列表而不获取空指针?
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 通过引用传递。当您调用 new 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"
您将需要在构造函数中初始化,或使方法return成为您传入的变量...
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"
以下问题。我有大量的 ArrayList attributes
(与 Kreuzlagerort20kg
等基本相同)。我不想在构造函数中初始化它们(注释掉的部分),而是喜欢在 fillLager()
方法中初始化它们,这样就可以在构造函数中调用方法,然后初始化并填充它们。如果我在代码中这样做,我总是会得到一个 nullpointerexception。
是否有可能 and/or 在方法内初始化数组列表而不获取空指针?
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 通过引用传递。当您调用 new 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"
您将需要在构造函数中初始化,或使方法return成为您传入的变量...
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"