为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

阿晨1998 2023-07-28 10:06:38
我必须编写一个代码来记录参加不同活动的竞争对手。竞争对手是一个具有以下属性的类:name、surname、age、id。事件是一个具有以下属性的类:名称、日期、参赛者列表。然后教授说我还必须跟踪竞争对手是否已确认参加该活动。也就是说,参赛者可能已被列入某项赛事,但可能尚未确认参加该赛事。如何实现这一点取决于我。因此,请记住,竞争对手可能会参加多个活动,我想避免为同一个人参加的每个活动创建一个 Competitor 对象。我正在考虑一些在 C 中听起来最佳但无法翻译成 Java 的东西:我想创建一个新类 CompetitorInEvent,它将保存 Competitor 中包含的所有信息以及代表事件确认的布尔值(没有说明是哪个事件,因为这样的 attendantInEvent 所属的列表已经告诉了它)。因此,我会将参赛者名单变成参赛者名单。CompetitorInEvent 不应扩展 Competitor,而应保存对 Competitor 对象的引用。在 C 中,我承诺仅访问此引用以进行读取,而绝不进行写入,并且我将让 struct CompetitorInEvent 只存储一个地址和一个布尔值(或者更确切地说是 C 中的一个短值)。这对我来说似乎是正确的,因为我没有多次实例化相同的现实世界对象或浪费内存。但是有没有办法在 Java 中实现这些相同的目标呢?我知道指针不可用。
查看完整描述

1 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

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 对象都被销毁/垃圾收集。


查看完整回答
反对 回复 2023-07-28
  • 1 回答
  • 0 关注
  • 69 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信