簡體   English   中英

從另一個類添加到對象ArrayList

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM