为了账号安全,请及时绑定邮箱和手机立即绑定

从另一个类添加到对象 ArrayList

从另一个类添加到对象 ArrayList

哈士奇WWW 2022-05-25 17:36:00
我有一个名为 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 的类,它向 Stock 中添加了一个项目。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;}我正在使用单元测试来查看我是否确实向 Stock 中添加了一个项目。public class ItemRegisterTest {@Testpublic 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。
查看完整描述

2 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

从评论中,您可以做的可能是更改父子关系并让 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 对象的一个实例上工作。


查看完整回答
反对 回复 2022-05-25
?
12345678_0001

TA贡献1802条经验 获得超5个赞

我想要的是添加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);

    }

}


查看完整回答
反对 回复 2022-05-25
  • 2 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号