在Java中实现一对一单向关联
如何在Java中实现一对一单向关联(没有ORM)。我认为双向是可能的。关联意味着两个类(比如零件和零件号)都需要独立存在,一对一意味着一个零件只有一个零件号,反之亦然,单向意味着零件应该知道零件号,但相反。现在,零件号将如何知道是否已分配。如果我们牺牲PartNumber的独立存在性,那么它的组成就可以实现为单向或双向关联。两者都可以。可以通过多种方式确保1:1属性保持不变:在Java中实现一对一单向关联,java,associations,uml,Java,Associations,Uml,如何在Java中实现一对一单向关联(没有ORM)。我认为双向是可能的。关联意味着两个类(比如零件和零件号)都需要独立存在,一对一意味着一个零件只有一个零件号,反之亦然,单向意味着零件应该知道零件号,但相反。现在,零件号将如何知道是否已分配。如果我们牺牲PartNumber的独立存在性,那么它的组成就可以实现为单向或双向关联。两者都可以。可以通过多种方式确保1:1属性保持不变: 在双向情况下,让设置者使用正向或反向链接,以确保另一端的对象尚未关联,并可能中断该关系 在单向情况下,通过取消设置零件
- 在双向情况下,让设置者使用正向或反向链接,以确保另一端的对象尚未关联,并可能中断该关系
- 在单向情况下,通过取消设置零件的
或零件号
的零件号
的功能;e、 g.让零件
在其构造函数中创建自己的零件
零件号
另一种选择是将
PartNumber
设置为“基于值的类”,并始终使用PartNumber.equals(Object)
来测试相等性。我在这里找到了一个实现:
1.客户类别:
导入java.util.ArrayList;
公共类客户{
私有字符串名称;
ArrayList orders=新的ArrayList();
公共客户(字符串名称){
this.name=名称;
}
公共字符串getName(){
返回名称;
}
公共阵列列表getOrders(){
退货订单;
}
公共无效添加命令(命令){
订单。添加(订单);
}
}
2.LineItem类别:
公共类行项目{
私人整数数量;
产品;
公共行项目(整数数量、产品){
这个。数量=数量;
这一点。产品=产品;
}
公共双重计算ElineItemCost(){
退货(数量*产品。CalculatePriceAfter折扣());
}
公共整数getQuantity(){
退货数量;
}
公共产品{
退货产品;
}
}
您是在告诉我们还是在问我们?哦,当然下次会注意的。斯蒂芬同意第一部分,但关于第二部分,我很困惑,它是否会变成组成部分(因为零件号仍然在零件内部,并随零件一起销毁)?可能是的。但这有关系吗?这个“答案”只不过是来自外部源的代码引用。对您添加了到源代码的链接,但是从某个地方转储一些代码肯定不是这个社区精神的答案。我不认为上述代码提供了与上述约束相关的必需关系。基于上述讨论,我得出结论,一对一单向关系不能在Java中实现(合成是可能的)。从某种意义上说,这种关系本身就是矛盾的,因为第二个对象在不知道其与多少第一个对象连接的情况下不能遵守约束(由于单向导航,这是不可能的)。如果这不是正确的理解,请评论。。
1.Customer Class :
import java.util.ArrayList;
public class Customer {
private String name;
ArrayList<Order> orders = new ArrayList<Order>();
public Customer(String name) {
this.name = name;
}
public String getName() {
return name;
}
public ArrayList<Order> getOrders() {
return orders;
}
public void addOrder(Order order) {
orders.add(order);
}
}
2.LineItem Class :
public class LineItem {
private int quantity;
Product products;
public LineItem(int quantity, Product products) {
this.quantity = quantity;
this.products = products;
}
public double calculateLineItemCost() {
return (quantity * products.calculatePriceAfterDiscount());
}
public int getQuantity() {
return quantity;
}
public Product getProducts() {
return products;
}
}