class Book {
private Chapter[] chapters = new Chapter[5];
}
class Chapter {
private Book book;
}
这是实现上述关系的正确方法吗?我需要解释一下。谢谢。
这还不够。
在组合关系中,如果整个
实例被销毁,则部分
的实例也应立即销毁。
你应该有一些代码(一些机制)来实现这一点。
例如,如果从类外部推送<code>Chapter</code>s的实例(例如通过使用构造函数),则在删除<code>Book</code}实例时,应小心删除这些实例。
如果您的实例是在Book
类中创建的(通过new…),则无需执行任何操作,您的Chapter
实例将被Book
删除。
在此参考中:Object Prime,第三版(Scott W. Ambler,2004)
在(13.4.12.7 实现组合)一节中
您可能已经猜到,聚合和组合关联的处理方式与关联完全相同。从编程的角度来看,主要的区别在于,聚合意味着两个类之间的关系比关联更紧密,而组合意味着更紧密的关系。虽然图13.11没有包括作文的关联,但研习班和课程之间的关联是紧密的,事实上,至少和你在作文中看到的一样紧密(不幸的是,句子规则在这种情况下没有意义)。在图13.31中,您可以看到在课程类中实现remove()方法时这种紧密性的结果——当一门课程被删除时,它的研讨会也被删除。这种类型的生命周期管理代码在组合层次结构中很典型。
/**
* Remove a course
*
* @postcondition The course and its seminars will be removed
*/
public void remove()
{
if (getSeminars() != null) {
// Clone the original set because we can't safely remove
// the items from the set while we iterate over it
HashSet set = (HashSet) getSeminars().clone();
Iterator iterator = set.iterator();
// Remove each seminar of this course
while (iterator.hasNext()) {
Seminar seminar = (Seminar) iterator.next();
// Remove the seminar from the collection
getSeminars().remove(seminar);
}
}
// Remove the instance from permanent storage
// Persistence code ...
}
考虑以下示例:
class Person {
private final Brain brain;
Person(Brain humanBrain) {
brain = humanBrain;
}
}
在代码的其他部分中,我们可以这样定义:
Brain b = new Brain();
// or we have an instance of Brain in other scopes
// not exactly in this scope
Person p1 = new Person(b);
Person p2 = new Person(b);
因此,在这段代码中,我们可以将Brain
的一个实例设置为两个不同的Person
。
注意:在组合中,我们应该管理实例的生命周期。只定义任何类的私人决赛
,不显示它们之间的组合。
例如,下面的示例可以是组合。因为Part
的实例在整个
被删除时被删除:
public class House {
private final Room room;
public House() {
room = new Room();
}
}
在组合中:整个
可能直接负责部分
的创建或销毁。或者它可能使用已经从类外部创建和管理的“部分”(由代码的其他部分)。在这种情况下,部分
的删除应该由外部代码管理,部分
应该在整个
删除后立即删除。
我们应该建立一种机制,在删除整体
时删除part
。如果我们不删除部分
并在其他整体
中使用它,那么它就是聚合或关联。
问题内容: 这很奇怪。一位同事询问了java中myArray.hashCode()的实现。我以为我知道,但是后来我进行了一些测试。检查下面的代码。我注意到的奇怪想法是,当我编写第一个系统时,结果是不同的。请注意,这几乎就像报告内存地址并修改类一样,将地址或其他内容移动了。只是想我会分享。 问题答案: 该方法继承自,这意味着哈希码取决于引用。要基于数组的内容获取哈希码,请使用。 请注意,尽管它是一个
本文向大家介绍堆排序实例(Java数组实现),包括了堆排序实例(Java数组实现)的使用技巧和注意事项,需要的朋友参考一下 堆排序:利用大根堆 数组全部入堆,再出堆从后向前插入回数组中,数组就从小到大有序了。 堆排序:对数组进行构造堆(最大堆) 以上这篇堆排序实例(Java数组实现)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
问题内容: 我尝试用Java的编程思想实现OAuth,但失败了。我不知道为什么,但是我的代码不起作用。每次运行程序时,都会引发IOException,其原因为“ java.io.IOException:服务器返回的HTTP响应代码:401”(401表示未授权)。我仔细查看了文档,但是我真的不明白为什么它不起作用。我想使用的OAuth提供程序是twitter,我也在其中注册了我的应用程序。 在此先感
问题内容: 因此,我正在开发一个简单的Java应用程序,该应用程序允许用户输入图像作为查询,并使该应用程序将其与图像数据库进行比较(基本上只不过是不同图像的目录)。我基本上是在研究几种图像相似性测量技术,以找出哪些适合比较汽车图片。 我一直在做一些阅读,除了FFT / SSIM之外,我还阅读了SIFT算法可以产生非常好的结果。但是,作为只有大约一年的Java基本经验的人,老实说,我不确定我是否有足
本文向大家介绍Java Web中常用的分页组件(Java端实现),包括了Java Web中常用的分页组件(Java端实现)的使用技巧和注意事项,需要的朋友参考一下 前言 好久没写Web程序了,这一段时间看了看原来师弟们做的一些程序,感觉还是有很多不足,一个比较典型的例子就是分页查询的实现,正好借着这个机会简单记录一下。 分析 使用场景 “分页”在Web程序里非常常见,比如我们在页面上经常要展示一
问题内容: 数组在Java中被实现为对象,对吗?如果是这样,我可以在哪里查看数组类的源代码。我想知道数组中的length变量是否定义为常量,如果是这样,为什么不是全部使用大写字母LENGTH来使代码更易于理解。 问题答案: 尽管从它们继承java.lang.Object的角度来看,数组是Object,但是这些类是作为语言的特殊功能动态创建的。它们未在源代码中定义。 考虑以下数组: 没有这样的源代码