を示す一覧表示するカスタムクラスのオブジェクトを追加すると、来て出力がこれは私が私が知っていることを確実にするために書いたサンプルテストコードで曖昧
1
1
であり、それが正しいか、samples
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());
}
}
権利でありますsampleList
は、2つの異なるメモリ位置を指す2つの異なる参照であるため、samples
に追加すると、sampleList
のサイズは変更されません。
しかし、私のプロジェクトコード、それは違うで
が、これはこれは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
クラスのコードである私のForm
クラス
public class InvoiceForm extends BaseActionForm {
private List<ProductTO> products;
private List<ProductTO> productList;
// getters and setters
}
です最初は1
であるので、上記のコードでif block
が実行されます。コメント部分は前のコードです。新しいコードProductTO productTO = new ProductTO();
または古いコードProductTO productTO = ProductEntryHandler.getInstance().prepareProductsForInvoice();
であっても、問題は同じです。
私は、両方のリストのサイズがであるメソッドが実行されると言ったように。行invoiceForm.getProducts().add(productTO);
が実行されると、products
とproductList
のサイズは2
になります。これはテストコードと競合しています。ネストラインinvoiceForm.getProductList().add(productTO);
が実行されると、リストサイズは両方とも3
になります。私はなぜそれが起こっているのか分からない、誰かが助けることができる?
リストオブジェクトを取得し、その中に要素を追加しています。それは間違いなくサイズを増やすでしょう。 – Kick
@Kick私はテストコードを編集しましたが、テストの出力は同じです –