在方法中初始化 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"