繁体   English   中英

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

[英]add object to arrayList in the constructor

“ Bericht”对象的单独类文件的一部分(用于消息的荷兰语,包含一个字符串和两个日期):

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

    }

在我的主要方法中的某个地方,我从此类创建了新对象:

 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 

方法“ printberichten”迭代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中,但是看来我只创建了我的类的一个实例。

在命令“ lijst.add(this)”之前和之后,我添加了一个System.out.println来检查Arraylist中的大小,一个始终返回0,另一个始终返回“ 1”。

根据您的期望,您需要保持静态:

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

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

public static void printBerichten(JTextArea jta) {

通过将静态设置为静态,将在构造Bericht的每个实例时将其添加到单个列表中。 如果lijist不是静态的,则Bericht的每个实例将具有其自己的列表,并且仅单个实例将被添加到该列表中。

使静态成为静态:

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())

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM