簡體   English   中英

如何從所屬類的實例變量之一中獲取類的特定實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM