在构造函数中将对象添加到arrayList

时间:2014-10-13 21:19:55

标签: java arraylist constructor

" Bericht" -objects(dutch for messages,包含字符串和两个日期)的单独类文件的一部分:

private ArrayList<Bericht> lijst = new ArrayList<>(); //
//constructor for a new object:
    public Bericht(String bericht, Date startDag, Date eindDag) {
        this.bericht = bericht;
        this.startDag = startDag;
        this.eindDag = eindDag;
       // System.out.println(""+lijst.size())// prints always a "0"
        lijst.add(this);
       // System.out.println(""+lijst.size())//is always one

    }

在我的main方法的某个地方,我从这个类创建新对象:

 Bericht message = new Bericht(berichtVak.getText(), calendar1.getDate(), calendar2.getDate());
 message.printBerichten(berichtTextArea); //this method prints the String from each Bericht- object in the textarea 

方法&#34; printberichten&#34;迭代ArrayList并打印所有消息

   public void printBerichten(JTextArea jta) {
        StringBuffer bfr = new StringBuffer();
        for (Bericht msg : lijst) {
            bfr.append(msg.getBericht()); //this getter method returns the string
        }
        jta.setText(bfr.toString());
    }

getBericht getter方法:

   public String getBericht() {
    return bericht;
}

因此,如果我创建一个新对象,我以前的所有对象都应该显示在textArea中,但似乎我只创建了一个类的实例。

命令之前和之后&#34; lijst.add(this)&#34;我添加了一个System.out.println来检查Arraylist的大小,一个返回0,另一个返回&#34; 1&#34;。

2 个答案:

答案 0 :(得分:1)

根据您的期望,您需要lijst是静态的:

private static ArrayList<Bericht> lijst = new ArrayList<>(); //

printBerichten也可以是静态的,因为它不访问任何成员变量:

public static void printBerichten(JTextArea jta) {

通过使lijst静态化,Bericht的每个实例将在构造时添加到单个列表中。当lijist不是静态的时,Bericht的每个实例都有自己的列表,只有单个实例会被添加到该列表中。

答案 1 :(得分:0)

make lijst static:

private ArrayList<Bericht> lijst = new ArrayList<>(); //
    public Bericht(String bericht, Date startDag, Date eindDag) {
        this.bericht = bericht;
        this.startDag = startDag;
        this.eindDag = eindDag;
       // System.out.println(""+lijst.size())
        lijst.add(this);
       // System.out.println(""+lijst.size())

    }