我必須編寫一個代碼來記錄參加不同活動的競爭對手。競爭對手是一個具有以下屬性的類: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 對象都被銷毀/垃圾收集。
添加回答
舉報
0/150
提交
取消