Как получить конкретный экземпляр класса из одной из переменных экземпляра, которые ему принадлежат

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
    Ни один объект не принадлежит другому.
  • 0
    Вам нужна обратная ссылка от планет к звездам.
Теги:
class
instance-variables

4 ответа

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: n в реляционных базах данных - у вас есть 1 звезда, у которой есть n планет, и каждая из планет принадлежит 1 звезде. В базе данных вы должны моделировать это с помощью внешнего ключа в каждой таблице.

В Java вы можете сопоставить его так же (что вы на самом деле делаете при попытке моделировать это отношение через JPA): звезда содержит список всех планет, а на планете есть поле, содержащее звезду.

0

Вам нужно иметь ссылку на звезду внутри вашей планеты. вы не можете получить экземпляр без него.

public class Planet {
private Star star;

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

Вы действительно не можете. Как показано, между планетаю и звездой нет связи.

Вы можете просмотреть иерархию классов. У вас в настоящее время есть Звезда с отношением 'has-a' к Planet и Comet. Разве это не галактика, которая содержит все 3? Или, может быть, вы хотите, чтобы планета имела отношение "есть-а" к Star

Ещё вопросы

Сообщество Overcoder
Наверх
Меню