Java 将ArrayList传递给另一个类

Java 将ArrayList传递给另一个类,java,class,collections,arraylist,Java,Class,Collections,Arraylist,我和ArrayList有点麻烦。我需要做的就是将一个填充的ArrayList传递给另一个类,这样我就可以在那里使用ArrayList的值。下面是第一节课的一个片段: public ArrayList<String> collCollect = new ArrayList<String>(); for (int i = 0; i < ListModel.size(); i++) { collCollect.add(ListModel.get(i).to

我和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);
public ArrayList collCollect=new ArrayList();
对于(int i=0;i
在这部分之前,一切都进行得很顺利(我去掉了其余的代码!)

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

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));
    } 
}
a类pMain;
DecimalFormat f=新的DecimalFormat(“0.00”);
public ArrayList listContent=新的ArrayList(pMain.collCollect);
DefaultListModel ListModelNew=新的DefaultListModel();
公共静态void main(字符串参数[]){
对于(int i=0;i
每次加载ClassB时,我都会从pMain中对数组的引用所在的行中得到一个NullPointerException


我无法从ClassA ArrayList获取到ClassB-。-

ClassA pMain的值//此处未初始化对象

pMain.collCollect
//这里是NullpointerException

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


需要在第二个类中创建
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=新的DecimalFormat(#0.00”);
公共ArrayList列表内容;
DefaultListModel ListModelNew=新的DefaultListModel();
公共静态void main(字符串参数[]){
ClassA pMain=新ClassA();
listContent=newarraylist(pMain.collCollect);
对于(int i=0;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));
    } 
}
DecimalFormat f=新的DecimalFormat(#0.00”);
DefaultListModel ListModelNew=新的DefaultListModel();
公共静态void main(字符串参数[]){
ClassA pMain=新ClassA();
对于(int i=0;i
您只需声明变量
pMain
,但从不为其赋值。因此,它将被初始化为
null
,当您试图访问它时,它会给您一个
NullPointerException


您必须像
ClassA pMain=new ClassA()
那样声明它,或者在别处赋值。如果您在其他地方赋值,请确保删除
listContent

的直接初始化,您的
ClassA pMain
未实例化。您需要创建ClassA的实际实例,如下所示:

ClassA pMain = new ClassA();

由于您正试图获取该类(collCollect)的公共属性,因此也可以通过ClassA中的构造函数或对新创建的ClassA实例调用某些方法来获取该类的公共属性。

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

public ArrayList<String> listContent = new ArrayList<String>(pMain.collCollect);
public ArrayList listContent=新的ArrayList(pMain.collCollect);
重写第二个类的构造函数,并将其传递到其中:

public ClassB(ArrayList<String> pMain) {
  this.listContent = pMain.collCollect;
}
public类b(ArrayList pMain){
this.listContent=pMain.collCollect;
}
@Ben,
可以将数组初始化代码保存在ClassA的collCollectInit()中。在第二个类中,创建ClassA对象作为ClassA pMain=new ClassA();pMain.collCollectInit();如果collCollect是ClassA中的公共引用或受保护引用,则使用pMain.collCollect。请使用getter和setter方法访问类变量。

好的,我一定是瞎了眼,没有初始化ClassB中的ClassA…现在已经修复了。但是ListModelNew没有任何内容,它被打印为“[]”,因此我认为ClassA中的ArrayList没有将值正确地传递给ClassB中的ArrayList listContent

您需要初始化
pMain
<代码>ClassA pMail=新ClassA()非常奇怪的代码!你能发送完整的代码吗?你能粘贴堆栈跟踪吗?我忘了初始化ClassA--好的,但是现在ListModelNew没有添加任何内容?!?!标准输出打印显示“[]”?!?我越来越糊涂了
public ArrayList<String> listContent = new ArrayList<String>(pMain.collCollect);
public ClassB(ArrayList<String> pMain) {
  this.listContent = pMain.collCollect;
}