与 Collection 对象具有关系的 class 是否与 Collection 的元素有关系?

Does a class with has-a relationship with a Collection object have a relationship with the Collection's elements?

我正在学习 Java 8 Programmer II 认证,我正在研究 classes 可以拥有的关系。我了解组合,但我想知道集合的元素之间是否存在关系,即 class 的 class 变量和 class。例如,考虑以下代码:

public class A {
    static ArrayList<String> strings = new ArrayList<String>();

    public A() {
        strings.add("foo");
    }
}

我们说字符串的String元素和classA有关系吗?

我会说是的。集合在这里几乎无关紧要,更多的只是 class 和字符串之间的 "has-a" 关系的实现细节,而不是其他任何东西。至于这是 class 范围内的关系而不是每个实例的关系这一事实,只要您知道并且这是您的意图就可以了。

是的,这是一个"aggregation" or a composition depending on the lifetime of related objects. See also https://softwareengineering.stackexchange.com/questions/61376/aggregation-vs-composition

首先我们应该弄清楚 class 是否 AString 如果 class A 有简单的 String 字段像这样:

public class A {
    static String aString;

    public A() {
       aString = "foo";
    }
}

……我也这么认为!那将是 "has-a" 关系 - A 有一个 String

在您的示例中有一个 String 的集合。我们也可以说 class A has-a (lot of ;) Strings... 你可以想象 class A 有很多与 String 个对象的关系; class A 将它们聚合在集合中。这类似于众所周知的组合示例 "car 'has' wheels".

你也可以说这是单向的一对多关系(单向的因为只有一方知道另一方)。

Has-a 和 is-a 是直观的概念。它们不是编译器会检查的规则。它是一个共享词汇表,用于有效地与他人交流并用于做出设计决策。那么 class A "has" 那些字符串呢?是的,但您很少会说 Class A 有一个字符串集合。一个简单的类比是当你背着一个包时,你不会立即说你在背着书,而你很可能会说你背着一个装满书的袋子(字符串集合)。