我们说我有这个类的多个实例:
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 :(得分:3)
您正在获取Class
个实例,而不是Star
个实例。
您可以在Planet
类型Star
中添加一个字段,该字段将引用它所属的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 :(得分:1)
误解了这个问题 - 所以这里有一个更好的答案:
您正在寻找的是关系数据库中1:n关系的典型用例 - 您有1颗星有n个行星,每个行星属于1颗星。在数据库中,您可以使用每个表中的外键对其进行建模。
在Java中,你可以用同样的方式映射它(当你试图通过JPA模拟这种关系时你实际做的那样):星星包含所有行星的列表,行星有一个包含星星的字段。
答案 2 :(得分:0)
你真的不能'。如图所示,从星球到星星没有关联。
您可能希望查看您的类层次结构。你目前拥有Star与Planet和Comet的'has-a'关系。是不是真的是包含所有3个星系的星系?或者也许你希望Planet与Star有“一对一”的关系
答案 3 :(得分:0)
你需要引用你星球内的恒星。没有它你就无法获得实例。
public class Planet {
private Star star;
public void setStar(Star star)
{
this.star = star;
}
public Star getStar()
{
return this.star;
}
}