将ArrayList传递给另一个类

3

我遇到了一些ArrayList的问题。我只需要将填充好的ArrayList传递给另一个类,以便我可以在那里使用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时,我都会从引用pMain中数组的那一行得到一个NullPointerException。
任何帮助将不胜感激...我无法从ClassA ArrayList获取值到ClassB。

2
你需要初始化 pMainClassA pMail = new ClassA(); - MAV
非常奇怪的代码!你能发完整的代码吗? - Farshid Zaker
你能粘贴一下堆栈跟踪吗? - lichengwu
7个回答

3

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

pMain.collCollect // 这里会出现 NullpointerException(空指针异常)。

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

变更

ClassA pMain;

to

ClassA pMain = new ClassA ();

2

第二个类需要创建一个ClassA的实例。我建议在主方法内创建它,这样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));
    } 
}

我忘记初始化ClassA了-.- 好的,但现在ListModelNew里什么也没有被添加?!?StandardOutPrint向我展示了“[]”?!?我越来越困惑了。 - ZeroGS

1
你的 ClassA pMain 没有被实例化。你需要像这样创建 ClassA 的实际实例:
ClassA pMain = new ClassA();

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


0

不要把实例化程序放在类的顶部:

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

覆盖你的第二个类的构造函数,并在那里传递它:

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

0

你只是声明了变量pMain,但从未给它赋值。因此,它将被初始化为null,并在尝试访问它时给出NullPointerException

你必须像这样声明它:ClassA pMain = new ClassA()或在其他地方分配一个值。如果你在其他地方分配了值,请确保删除listContent的直接初始化。


0

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


0

好的,我一定是瞎了,没有在ClassB中初始化ClassA...现在已经修复了。但是ListModelNew没有任何内容,它被输出为"[]",所以我认为ClassA中的ArrayList没有正确地将值传递给ClassB中的ArrayList listContent。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接