Java 类包含子类的一个元素

Java 类包含子类的一个元素,java,uml,Java,Uml,给出下图,我想知道以下几点: 如何确保一辆普通车可以有a型或B型GPS,而不是两者都有 像这样使用泛型怎么样: public class A<T extends B> { List<T> list = new ArrayList<>(); public List<T> getList() { return list; } public void setList(List<T> li

给出下图,我想知道以下几点:

  • 如何确保一辆普通车可以有a型或B型GPS,而不是两者都有

像这样使用泛型怎么样:

public class A<T extends B> {
    List<T> list = new ArrayList<>();

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }
}

public class B {
}

public class C extends B {
}

public class D extends B {
}
A<C> a = new A<>();
C c = new C();
D d = new D();
a.getList().add(c); //works fine
a.getList().add(d); //compile error
公共A类{
列表=新的ArrayList();
公共列表getList(){
退货清单;
}
公共无效集合列表(列表){
this.list=列表;
}
}
公共B级{
}
公共类C扩展到B{
}
公共类D扩展到B{
}
然后,您将使用所需的子类型B实例化类A,如下所示:

public class A<T extends B> {
    List<T> list = new ArrayList<>();

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }
}

public class B {
}

public class C extends B {
}

public class D extends B {
}
A<C> a = new A<>();
C c = new C();
D d = new D();
a.getList().add(c); //works fine
a.getList().add(d); //compile error
A A=新A();
C=新的C();
D=新的D();
a、 getList().add(c)//很好
a、 getList().add(d)//编译错误

从您的评论中选取果篮,您需要为
0..n
指定多重性,而不是
1


如果希望所有实例都是相同的子类,则需要以任何方式添加约束。如果您的工具不允许这样做,只需添加一个注释,
{B
的所有实例必须具有相同的类型}
或类似内容。

由于最大多重数为1,示例图缺少的只是一个{完全,不相交}的泛化集。您的图表现在默认显示{不完整,重叠},这意味着实例可以是a和B的成员,或者只是GPS的成员

我想您需要知道如何专门在Java中实现约束?我不知道你的第二个子弹是关于什么的。你把类的对象弄乱了吗?对我来说,“类A只能有超级类B的子类D或C中的一个子类”没有任何意义。。。很抱歉从您的图表来看,绝对没有理由将类B置于A和C/D类之间。A级的目的是什么?它能仅仅是C和D的一个超类吗?@ThomasKilian我知道如何使用约束,但我使用的软件不允许我将它们添加到关联链接(starUML)@Vadim我将给你一个更具体的例子:类a是水果篮,类B是超类水果,类C和D是特定类型的水果。我想要一个类A的实例包含C或D类型的对象。那将是什么?捉迷藏?请坚持一个问题!