从另一个 Class 添加到对象 ArrayList
Adding to an object ArrayList from another Class
我有一个 Class 命名的项目。
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 的 Class 创建项目的 ArrayList。
public class Stock {
private ArrayList<Item> stock;
public Stock() {
stock = new ArrayList<Item>();
}
public ArrayList<Item> getStock() {
return stock;
}
我还有一个名为 ItemRegister 的 Class,它可以将一个项目添加到库存中。
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);
}
}
当我 运行 这些测试时 return 出现错误。
在第二个 assertTrue
上,如果我用对象 i
进行测试,它将 return 为真,但我想要添加到 Stock
而不是 ItemRegister
因为如果稍后我想咨询 Stock
我会打电话给 Stock
而不是 ItemRegister
.
根据评论,您可以做的可能是更改父子关系并让 ItemRegister 持有 Stock 对象的实例。因此,您可以像这样修改 ItemRegister class:
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对象上工作了。
I want is to add to Stock
and not ItemRegister
because if later on I wanna consult Stock
I'll call Stock and not 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);
}
}
我有一个 Class 命名的项目。
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 的 Class 创建项目的 ArrayList。
public class Stock {
private ArrayList<Item> stock;
public Stock() {
stock = new ArrayList<Item>();
}
public ArrayList<Item> getStock() {
return stock;
}
我还有一个名为 ItemRegister 的 Class,它可以将一个项目添加到库存中。
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);
}
}
当我 运行 这些测试时 return 出现错误。
在第二个 assertTrue
上,如果我用对象 i
进行测试,它将 return 为真,但我想要添加到 Stock
而不是 ItemRegister
因为如果稍后我想咨询 Stock
我会打电话给 Stock
而不是 ItemRegister
.
根据评论,您可以做的可能是更改父子关系并让 ItemRegister 持有 Stock 对象的实例。因此,您可以像这样修改 ItemRegister class:
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对象上工作了。
I want is to add to
Stock
and notItemRegister
because if later on I wanna consultStock
I'll call Stock and notItemRegister
.
然后你需要将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);
}
}