[英]How to get the specific instance of a class from one of the instance variables that belong to it
假設我有該類的多個實例:
public class Star {
public Star(ArrayList<Planet> planets, ArrayList<Comet> comets) {
pla = planets;
com = comets;
}
// Getters and setters go here
private ArrayList<Planet> pla;
private ArrayList<Comet> com;
}
我如何處理某個特定Planet
所屬的Star
實例? 例如,請參見以下偽代碼:
aSpecificPlanet.getInstanceOfClassThisBelongsTo().doStuffWithIt();
我已經在Planet
的一個吸氣劑中嘗試過此方法:
public Star getStar() {
return this.getClass();
}
但我收到此錯誤: incompatible types: Class<CAP#1> cannot be converted to Star
我怎樣才能做到這一點?
您得到的是Class
實例,而不是Star
實例。
您可以在類型為Star
Planet
中添加一個字段,該字段將引用它所屬的Star
。 每當將“ Planet
添加到“ Star
,都可以設置以下字段:
Star star = new Star(planets, comets);
for(Planet planet : planets) {
planet.setStar(star); // add this field
}
您可以將其放在實用程序方法中,以避免重復代碼並確保一致性:
public void addPlanet(Star star, Planet planet) {
if(star != null && planet != null) {
star.getPlanets().add(planet); // assuming the list is always not null
planet.setStar(star);
}
}
誤解了問題-因此有一個更好的答案:
您正在尋找的是關系數據庫中1:n關系的典型用例-您有1顆恆星,其中n顆行星,每個行星都屬於1顆恆星。 在數據庫中,您可以在每個表中使用外鍵對此建模。
在Java中,可以用相同的方式進行映射(嘗試通過JPA對這種關系進行建模時實際上要執行的操作):恆星包含所有行星的列表,並且行星具有包含恆星的字段。
你真的不能。 如圖所示,行星與恆星之間沒有關聯。
您可能希望查看您的類層次結構。 您當前擁有與Planet和Comet之間“擁有”關系的Star。 真的是包含所有這三個星系的星系嗎? 或者,也許您希望Planet與Star具有“親密”關系
您需要參考行星內部的恆星。 沒有它,您將無法獲得實例。
public class Planet {
private Star star;
public void setStar(Star star)
{
this.star = star;
}
public Star getStar()
{
return this.star;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.