次のコードを検討してください。
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 を使用しています。