将ArrayList传递给另一个类

时间:2013-11-25 12:34:01

标签: java class collections arraylist

我对ArrayList有些麻烦。我需要做的就是将一个填充的ArrayList传递给另一个Class,这样我就可以使用ArrayList的值了。这是第一节课的片段:

public ArrayList<String> collCollect = new ArrayList<String>();
for (int i = 0; i < ListModel.size(); i++) {
        collCollect.add(ListModel.get(i).toString());
    }
    System.out.println(collCollect);

直到这部分,一切都进展顺利(我剥离了代码的其余部分!)

现在是棘手的部分!这是第二类:

ClassA pMain;
DecimalFormat f = new DecimalFormat("#0.00");
public ArrayList<String> listContent = new ArrayList<String>(pMain.collCollect);
DefaultListModel<String> ListModelNew = new DefaultListModel<String>();

public static void main(String args[]) {
for (int i = 0; i < listContent.size(); i++){
        ListModelNew.add(i, listContent.get(i));
    } 
}

每次加载ClassB时,我都会从Line获得一个NullPointerException,其中对pMain中的Array进行了引用。

任何帮助都会被评估...我无法将ClassA ArrayList中的值传递给ClassB -.-

7 个答案:

答案 0 :(得分:3)

ClassA pMain; //这里没有初始化对象。

pMain.collCollect //这里你得到的是NullpointerException

public ArrayList<String> listContent = new ArrayList<String>(pMain.collCollect);
                                                                    ^__see here   

更改

ClassA pMain;

ClassA pMain = new ClassA ();

答案 1 :(得分:2)

需要在第二个类中创建ClassA的实例。我建议在main方法中创建它,因此ClassA不是第二类的依赖项。

DecimalFormat f = new DecimalFormat("#0.00");
public ArrayList<String> listContent; 
DefaultListModel<String> ListModelNew = new DefaultListModel<String>();

public static void main(String args[]) {
ClassA pMain = new ClassA();
listContent = new ArrayList<String>(pMain.collCollect);
for (int i = 0; i < listContent.size(); i++){
        ListModelNew.add(i, listContent.get(i));
    } 
}

这可以进一步重构:

DecimalFormat f = new DecimalFormat("#0.00");
DefaultListModel<String> ListModelNew = new DefaultListModel<String>();

public static void main(String args[]) {
ClassA pMain = new ClassA();
for (int i = 0; i < pMain.collCollect.size(); i++){
        ListModelNew.add(i, pMain.collCollect.get(i));
    } 
}

答案 2 :(得分:1)

您的ClassA pMain未实例化。您需要像这样创建ClassA的实际实例:

ClassA pMain = new ClassA();

由于您正在尝试获取该类的公共属性(collCollect),因此也可以通过ClassA中的构造函数或通过在新创建的ClassA实例上调用某个方法来使其存在。 / p>

答案 3 :(得分:0)

嗯,你只需要声明变量pMain,但永远不会给它任何东西。因此,它将使用null初始化,并在您尝试访问时为您提供NullPointerException

您必须将其声明为ClassA pMain = new ClassA()或在其他位置指定值。如果您在其他位置指定值,请务必删除listContent

的直接初始化

答案 4 :(得分:0)

而不是将实例化器放在类的顶部:

public ArrayList<String> listContent = new ArrayList<String>(pMain.collCollect);

覆盖第二个类的构造函数,并将其传递到那里:

public ClassB(ArrayList<String> pMain) {
  this.listContent = pMain.collCollect;
}

答案 5 :(得分:0)

@Ben, 您可以在ClassA的collCollectInit()中保留数组初始化代码。在第二个类中创建ClassA对象作为ClassA pMain = new ClassA(); pMain.collCollectInit();然后使用pMain.collCollect如果collCollect是ClassA中的公共或受保护引用。请使用getter和setter方法访问类变量。

答案 6 :(得分:0)

好的,我一定是盲目的,不能在ClassB中初始化ClassA ......现在已经修复了。但是ListModelNew没有任何打印为“[]”的内容,所以我认为ClassA中的ArrayList没有正确地将值传递给ClassB中的ArrayList listContent