在方法中初始化Arraylist

时间:2015-05-29 14:57:18

标签: java methods arraylist initialization

以下问题。我有大量的ArrayList attributes(与Kreuzlagerort20kg基本相同等)。我没有在构造函数中初始化它们(注释掉的部分),而是喜欢在fillLager()方法中初始化它们,这样就可以在构造函数中调用方法并将它们初始化并填充。如果我在代码中这样做,我总是得到nullpointerexception。

在方法中初始化一个arraylist是否可能和/或明智,而没有得到nullpointer?

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 个答案:

答案 0 :(得分:1)

你不能在传递给方法的变量上调用new,并且仍然让调用方法引用原始变量,因为Java通过引用传递。当你调用新的X()然后有一个新的引用,并且调用你的另一个方法的方法将不知道该变量现在指向另一个引用...

e.g。

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

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

致电methodA将打印&#34; AAAAA&#34;

您需要在构造函数中初始化,或者让方法返回您传入的变量...

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现在将打印&#34; BBBBB&#34;

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

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

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

也会产生&#34; BBBBB&#34;

答案 1 :(得分: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
    }}}}}}