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对这种关系建模时,实际上就是这样做的):该恒星包含所有行星的列表,该行星有一个包含该恒星的字段。没有对象属于另一个。您需要从行星到恒星的反向引用。没有对象属于另一个。您需要从行星到恒星的反向引用。