Java 如何从属于某个类的实例变量之一获取该类的特定实例

Java 如何从属于某个类的实例变量之一获取该类的特定实例,java,class,instance-variables,Java,Class,Instance Variables,假设我有多个此类实例: public class Star { public Star(ArrayList<Planet> planets, ArrayList<Comet> comets) { pla = planets; com = comets; } // Getters and setters go here private ArrayList<Planet> pla; priv

假设我有多个此类实例:

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的一个getter中尝试过这一点:

public Star getStar() {
    return this.getClass();
}
但是我得到了这个错误:
不兼容的类型:类不能转换成星型


我该怎么做?

您得到的是
实例,而不是
星型
实例

您可以在
Planet
中添加类型为
Star
的字段,该字段将引用它所属的
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);
   }
}

您得到的是
实例,而不是
星型
实例

您可以在
Planet
中添加类型为
Star
的字段,该字段将引用它所属的
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);
   }
}

你真的不能。如图所示,行星与恒星之间没有关联


您可能希望查看您的类层次结构。你现在有一颗与行星和彗星有“has-a”关系的恒星。真的是包含所有3个星系的星系吗?或者也许你们想让这颗行星和这颗恒星有一种“有-有”的关系

你们真的不能。如图所示,行星与恒星之间没有关联


您可能希望查看您的类层次结构。你现在有一颗与行星和彗星有“has-a”关系的恒星。真的是包含所有3个星系的星系吗?或者你想让行星与恒星有“has-a”关系,你需要有一个行星内部恒星的参考。没有它,您无法获取实例。

public class Planet {
private Star star;

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

你需要有一个行星内部恒星的参考。没有它,您无法获取实例。

public class Planet {
private Star star;

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

误读了这个问题-所以这里有一个更好的答案:

您正在寻找的是关系数据库中1:n关系的典型用例-您有一颗恒星有n颗行星,每个行星都属于一颗恒星。在数据库中,您可以在每个表中使用外键对此进行建模


在Java中,你可以用同样的方式映射它(当你试图通过JPA对这种关系进行建模时,你实际上是这样做的):恒星包含所有行星的列表,行星有一个包含恒星的字段。

误读了这个问题-因此这里有一个更好的答案:

您正在寻找的是关系数据库中1:n关系的典型用例-您有一颗恒星有n颗行星,每个行星都属于一颗恒星。在数据库中,您可以在每个表中使用外键对此进行建模


在Java中,您可以用相同的方式映射它(当您试图通过JPA对这种关系建模时,实际上就是这样做的):该恒星包含所有行星的列表,该行星有一个包含该恒星的字段。

没有对象属于另一个。您需要从行星到恒星的反向引用。没有对象属于另一个。您需要从行星到恒星的反向引用。