[英]Adding to an object ArrayList from another Class
我有一個名為Item的類。
public class Item {
private int code;
private String name;
private double price;
private int quantity;
public Item(int code, String name, double price, int quantity) {
setCode(code);
setName(name);
setPrice(price);
setQuantity(quantity);
}
//Item getters and setters
我有一個名為Stock的類,它創建了一個ArrayList。
public class Stock {
private ArrayList<Item> stock;
public Stock() {
stock = new ArrayList<Item>();
}
public ArrayList<Item> getStock() {
return stock;
}
我也有一個名為ItemRegister的類,它將一個項目添加到庫存中。
public class ItemRegister extends Stock {
public void registerItem(String name, double price) {
getStock().add(new Item(setItemCode(), name, price, 0));
}
private int setItemCode() {
return getStock().size() + 1;
}
我正在使用單元測試來查看是否確實向庫存添加了物料。
public class ItemRegisterTest {
@Test
public void testIfHasRegisteredItemInStock() {
Stock s = new Stock();
assertTrue(s.getStock().size() == 0);
ItemRegister i = new ItemRegister();
i.registerItem("Oleo", 20.0);
assertTrue(s.getStock().size() == 1);
}
}
當我運行這些測試時,它返回錯誤。 在第二個assertTrue
,如果我使用對象i
測試,它將返回true,但我要添加到Stock
而不是ItemRegister
因為如果以后我想咨詢Stock
我將調用Stock
而不是ItemRegister
。
從注釋中,您可以做的是更改父子關系並使ItemRegister保留Stock對象的實例。 因此,您可以像這樣修改ItemRegister類:
public class ItemRegister {
Stock s;
public ItemRegister(Stock s) {
this.s = s;
}
public void registerItem(String name, double price) {
s.getStock().add(new Item(setItemCode(), name, price, 0));
}
private int setItemCode() {
return s.getStock().size() + 1;
}
}
然后,您最初編寫的測試代碼將是正確的,只需稍作修改ItemRegister i = new ItemRegister(s);
,您可以處理一個Stock對象實例。
我要添加到
Stock
而不是ItemRegister
因為如果以后我想咨詢Stock
我將呼叫Stock而不是ItemRegister
。
然后,您需要將Stock
包裝到ItemRegister
。
public class ItemRegister {
Stock stock;
public ItemRegister(Stock stock) {
this.stock = stock;
}
public void registerItem(String name, double price) {
stock.getStock().add(new Item(setItemCode(), name, price, 0));
}
private int setItemCode() {
return stock.getStock().size() + 1;
}
}
像這樣在單元測試中使用它:
public class ItemRegisterTest {
@Test
public void testIfHasRegisteredItemInStock() {
Stock s = new Stock();
assertTrue(s.getStock().size() == 0);
ItemRegister i = new ItemRegister(s);
i.registerItem("Oleo", 20.0);
assertTrue(s.getStock().size() == 1);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.