我有一个简单的程序来复制在餐馆吃饭的人和他们订购的物品。
以下是我的Diner类,用于创建表示人物的对象:
package dinersbill;
public class Diner {
private String name;
public Diner(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
接下来是我的Item类,代表人们可能订购的食物项目:
package dinersbill;
public class Item {
String name;
double price;
Diner buyer;
public Item(String name, double price, Diner buyer) {
this.name = name;
this.price = price;
this.buyer = buyer;
}
}
我想拥有该程序,以便在用户希望的情况下将项目分配给多个Diner。怎么会这样做?
答案 0 :(得分:1)
您可以反过来改变Diner
和Item
之间的对比关系:Diner
由 Item
组成。
例如,您可以将ArrayList<Item>
放入Diner
课程,并有一种方法可以用几道菜肴初次订婚。
答案 1 :(得分:0)
您可以在项目中使用食客名单
public class Item {
String name;
double price;
List<Diner> buyers;
public Item(String name, double price, List<Diner> buyers) {
this.name = name;
this.price = price;
this.buyers = buyers;
}
//You can still have another constructor for a single Diner like this
public Item(String name, double price, Diner diner) {
this.name = name;
this.price = price;
ArrayList<Diner> diners = new ArrayList<Diner>();
diners.add(diner);
this.buyers = diners;
}
}
答案 2 :(得分:0)
或许解决方案是重新考虑您的模型。 Item和Diner之间真的存在一对多的关系吗?
更自然的关系可能是反转它并让Diner在List对象中保存多个项目。
答案 3 :(得分:0)
听起来你需要一个java集合,而不是你的Diner类中的单个String。
http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html
但是,我确定这不是你想要的效果(你希望不止一个Diner订单是一样的,对吗?)
如果是这样,您只需要为每个Diner实例化一个新项目。为什么不将Diner分配给项目,而不是将项目分配给Diner?这样,您可以将同一项目实例化为多个Diners。
基本上,您需要在Diner类中引用Item,但不要在Item类中引用Diner。然后你可以说
new Diner(&#34; Bob&#34;,new Item(&#34; Cheesecake&#34;,2.50));
这将创建一个名为&#34; Bob&#34;谁订了一块芝士蛋糕。
public class Diner {
private String name;
private Item item;
public Diner(String name, Item item) {
this.name = name;
this.item = item;
}
public String getName() {
return name;
}
}