亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何避免在這里創建類似對象的冗余實例?

如何避免在這里創建類似對象的冗余實例?

阿晨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 關注
  • 96 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號