我是Java的新手,并使用对象的ArrayList
在java中编写一个小应用程序。
Transaction trans= new Transaction();
ArrayList<Transaction> arrTrans = new ArrayList<Transaction>();
当我Debug
应用程序时,我可以看到当我向arrayList 所有添加新元素时,arrTrans
的先前元素将被替换为新元素。
private void add(Transaction trans){
trans.description= (String)(jTextField1.getText());
trans.type=(String) (jComboBox1.getSelectedItem());
trans.amount=(String)(jTextField2.getText());
trans.date=(String)(jTextField3.getText());
arrTrans.add(trans);
}
我认为ArrayList对象为每个要添加到列表中的新元素添加新索引,并且永远不会修改以前的元素。我的代码出了什么问题?
答案 0 :(得分:4)
您总是添加相同的Transaction
对象并仅更新其内容。之前的元素没有被替换,它们实际上都是相同的元素。
如果将对象添加到ArrayList
,则不会创建对象的自动副本。您必须每次都实例化new Transaction()
,填充其字段,然后将其添加到ArrayList
。
您的代码可能如下所示:
private void add() {
Transaction trans = new Transaction();
trans.description = (String) jTextField1.getText();
trans.type = (String) jComboBox1.getSelectedItem();
trans.amount = (String) jTextField2.getText();
trans.date = (String) jTextField3.getText();
arrTrans.add(trans);
}
答案 1 :(得分:2)
您的问题是此代码
private void add(Transaction trans)
因为您正在传递一个对象并设置替换先前值的对象的值,所以执行类似这样的操作
private void add(){
Transaction trans= new Transaction();
//then set whatever you want to the obect and add the object to the list
}
答案 2 :(得分:1)
当您使用事务trans = new Transaction(); 时,您刚刚启动了一个对象。当您使用 private void add(Transaction trans){} 时,您刚刚修改了由您创建的对象。 你说你是java的新手,所以我建议你阅读有关创建对象的内容,你可以参考http://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html