Рассмотрим следующий код:Ошибка компиляции с родовыми типами циклических общих зависимостей
public abstract class Animal<A extends Cage<? extends Animal<A>>>
{
private A cage;
public A getCage()
{
return this.cage;
}
public void setCage(final A cage)
{
this.cage = cage;
}
}
public abstract class Cage<A extends Animal<? extends Cage<A>>>
{
private List<A> animals;
public void addAnimal(final A animal)
{
if (animal != null)
{
animal.setCage(this);
if (this.animals == null)
{
this.animals = new ArrayList<A>();
}
this.animals.add(animal);
}
}
}
Эти классы продлено другими классами.
Этот код не компилировать на линии
animal.setCage(this);
Любые мысли о том, почему этот код не компилируется и как это может быть фиксированной? Мы используем Java 1.6.
Не могли бы вы попробовать с: ** 1 °) ** 'класс животных < A удлиняет клетку, C extends Animal > '; ** 2 °) ** 'class Cage , C extends Cage >'; ** 3 °) ** 'animal.setCage ((C) this);'? –
sp00m
Спасибо @ sp00m, это работает! Блестящий материал. Если вы добавите это как ответ, я приму его, чтобы вы получили кредит за предложение этого. – manish
Добро пожаловать, я сделал * реальный * ответ. – sp00m