我正在攻读Java 8 Programmer II认证,并且我正在研究关系类可以拥有的。我理解组合,但我想知道在集合的元素和类的类变量之间是否存在关系。例如,请考虑以下代码:
public class A {
static ArrayList<String> strings = new ArrayList<String>();
public A() {
strings.add("foo");
}
}
我们是否说字符串的String元素与A类有关系?
答案 0 :(得分:1)
我会说是的。这里的集合几乎无关紧要,更多的只是类和字符串之间“has-a”关系的实现细节而不是其他任何东西。至于这是一个全班关系而不是每个实例的关系这一事实,只要你知道这是好的,那就是你的意图。
答案 1 :(得分:1)
首先,如果类A
具有简单的String
字段,我们应该明确表A
和String
类是否存在关联:
public class A {
static String aString;
public A() {
aString = "foo";
}
}
......我想是的!这将是“有一个”的实现 - A
有一个String
。
在您的示例中,有一组String
s。我们也可以说类A
有一个(很多;)String
...你可以想象类A
与String
个对象有很多关系; class A
将它们聚合在一起。这类似于众所周知的构图示例“car”有'wheel'。
你也可以说这是单向的一对多关系(单向关系,因为这种关系只有一方知道另一方)。
答案 2 :(得分:0)
是的,它是"aggregation"或组合,具体取决于相关对象的生命周期。另请参阅https://softwareengineering.stackexchange.com/questions/61376/aggregation-vs-composition
答案 3 :(得分:0)
Has-a和is-a是直观的概念。它们不是编译器会检查的规则。它是一种用于有效地与他人沟通并用于做出设计决策的共享词汇表。那么A&#34;有&#34;那些字符串?是的,但你很少说你宁可说A级有一系列字符串。一个简单的比喻就是当你背着书包时,你不会立刻说你带着书,而你最有可能说你带着一个装满书的书包(字符串集合)。