2014-09-29 8 views
1

比方說,我有這個類的多個實例:如何從屬於它的實例變量的一贈一類的特定實例

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; 
} 

我怎麼能與Star實例的工作是,說,具體的Planet屬於?例如,看到這個僞代碼:

aSpecificPlanet.getInstanceOfClassThisBelongsTo().doStuffWithIt(); 

我在Planet的干將之一試過這樣:

public Star getStar() { 
    return this.getClass(); 
} 

但我收到此錯誤:incompatible types: Class<CAP#1> cannot be converted to Star

我該怎麼辦這個?

+0

沒有對象_belongs_到另一個。 – 2014-09-29 20:42:17

+0

您需要從行星到星星的反向參考。 – Smutje 2014-09-29 20:43:09

回答

3

您將得到一個Class實例,而不是Star實例。

您可以在Star類型的Planet中添加一個字段,它將引用它所屬的Star。每當添加PlanetStar,這個字段可以設置:

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); 
    } 
} 
0

你真的不能」 。如圖所示,行星與星星之間沒有關聯。

您可能希望查看您的類層次結構。你目前有星與星球和彗星有'一個'關係。它不是真的包含所有3的星系嗎?或者,也許你想讓星球與星星有'有'一種關係

0

你需要有一個參考你的星球內的恆星。沒有它就無法獲得實例。

public class Planet { 
private Star star; 

    public void setStar(Star star) 
    { 
     this.star = star; 
    } 
    public Star getStar() 
    { 
     return this.star; 
    } 
} 
1

誤讀的問題 - 所以這裏有一個更好的答案:

你所尋找的是一個1的典型使用情況:N的關係在關係數據庫中 - 你有1星具有n個行星每個行星都屬於一顆星。在數據庫中,你可以用每個表中的外鍵對它進行建模。在Java中,你可以用同樣的方式映射它(當你試圖通過JPA對這個關係進行建模時,你實際上會這樣做):星包含所有行星的列表,行星有一個包含星的字段。

相關問題