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