这是一个简单的测试代码,我写的,以确保我知道什么是正确的添加自定义的类对象列表中出现歧义
class Form {
List<Sample> samples;
List<Sample> sampleList;
public List<Sample> getSamples() {
return samples;
}
public void setSamples(List<Sample> samples) {
this.samples = samples;
}
public List<Sample> getSampleList() {
return sampleList;
}
public void setSampleList(List<Sample> sampleList) {
this.sampleList = sampleList;
}
void setInitialData() {
this.samples = new ArrayList<Sample>();
this.sampleList = new ArrayList<Sample>();
}
}
class Sample {
}
public class ListAddingAmbiguity {
public static void main(String[] args) {
Form form = new Form();
form.setInitialData();
Sample sample = new Sample();
form.getSamples().add(sample);
form.getSampleList().add(sample);
System.out.println(form.getSamples().size());
System.out.println(form.getSampleList().size());
}
}
来输出是
1
1
而且它是正确的,samples
和sampleList
是两个不同的参考指向两个不同的内存位置,因此添加到samples
将不会更改大小sampleList
。
但在我的项目代码是不同的,这是我的Form
类
public class InvoiceForm extends BaseActionForm {
private List<ProductTO> products;
private List<ProductTO> productList;
// getters and setters
}
这是
private void setProductsToInvoice(InvoiceForm invoiceForm) throws Exception {
if(invoiceForm.getProducts() != null && !invoiceForm.getProducts().isEmpty()){
ProductTO productTO = new ProductTO();//ProductEntryHandler.getInstance().prepareProductsForInvoice();
invoiceForm.getProducts().add(productTO);
invoiceForm.getProductList().add(productTO);
}else {
List<ProductTO> productTOs = new ArrayList<ProductTO>();
productTOs.add(ProductEntryHandler.getInstance().prepareProductsForInvoice());
invoiceForm.setProducts(productTOs);
invoiceForm.setProductList(productTOs);
}
}
无论是产品和productList的是具有尺寸的代码在我Action
类1
最初,所以在上面的代码if block
将执行。注释部分是较早的代码。即使是新代码ProductTO productTO = new ProductTO();
或旧代码ProductTO productTO = ProductEntryHandler.getInstance().prepareProductsForInvoice();
问题也是如此。
就像我在执行方法时所说的那样,这两个列表的大小都是1
。当执行invoiceForm.getProducts().add(productTO);
行时,大小为products
和productList
的大小变为2
,这与我的测试代码冲突。现在当嵌套行invoiceForm.getProductList().add(productTO);
被执行时,列表大小变为3
。我不知道为什么它会发生,有人可以帮忙吗?
您正在检索列表对象,并添加其中的元素。它会定义增加大小。 – Kick
@Kick我编辑了我的测试代码,但测试的输出是相同的 –