猿问

如何避免在这里创建类似对象的冗余实例?

我必须编写一个代码来记录参加不同活动的竞争对手。竞争对手是一个具有以下属性的类:name、surname、age、id。事件是一个具有以下属性的类:名称、日期、参赛者列表。

然后教授说我还必须跟踪竞争对手是否已确认参加该活动。也就是说,参赛者可能已被列入某项赛事,但可能尚未确认参加该赛事。如何实现这一点取决于我。

因此,请记住,竞争对手可能会参加多个活动,我想避免为同一个人参加的每个活动创建一个 Competitor 对象。

我正在考虑一些在 C 中听起来最佳但无法翻译成 Java 的东西:我想创建一个新类 CompetitorInEvent,它将保存 Competitor 中包含的所有信息以及代表事件确认的布尔值(没有说明是哪个事件,因为这样的 attendantInEvent 所属的列表已经告诉了它)。

因此,我会将参赛者名单变成参赛者名单。

CompetitorInEvent 不应扩展 Competitor,而应保存对 Competitor 对象的引用。在 C 中,我承诺仅访问此引用以进行读取,而绝不进行写入,并且我将让 struct CompetitorInEvent 只存储一个地址和一个布尔值(或者更确切地说是 C 中的一个短值)。这对我来说似乎是正确的,因为我没有多次实例化相同的现实世界对象或浪费内存。但是有没有办法在 Java 中实现这些相同的目标呢?我知道指针不可用。


阿晨1998
浏览 70回答 1
1回答

九州编程

Java 保存对象的引用,您可以将其视为指针。您只是不能像 C 中的指针那样对引用进行任何算术运算。因此,此代码显示了两个引用同一竞争对手的 CompetitorInEvent:class CompetitorInEvent {    private Competitor competitor;    public CompetitorInEvent(Competitor competitor) {        this.competitor = competitor;    }}然后使用这个:Competitor aCompetitor = new Competitor();CompetitorInEvent event1 = new CompetitorInEvent(aCompetitor);CompetitorInEvent event2 = new CompetitorInEvent(aCompetitor);现在只实例化了一个 Competitor,并有 3 个对它的引用:局部变量 aCompetitor 和两个事件。请注意,Java 维护对象的引用计数,并且不会垃圾收集(销毁)aCompetitor,直到局部变量超出范围(或重新分配给另一个引用),并且两个 CompetitorInEvent 对象都被销毁/垃圾收集。
随时随地看视频慕课网APP

相关分类

Java
我要回答