[英]Is it bad practice to add an Object to a static ArrayList in constructor?
[英]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.