/* package whatever; // don't place package name! */
import java.util.* ;
import java.lang.* ;
import java.io.* ;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
abstract class Group< I extends Item< I, G> , G extends Group< I, G>> {
private List< I> items;
public List< I> getItems( ) { return null ; }
public void setItems( List< I> items) { }
}
abstract class Item< I extends Item< I, G> , G extends Group< I, G>> {
private List< G> subGroups;
public List< G> getSubGroups( ) { return null ; }
public void setSubGroups( List< G> subGroups) { }
}
class AGroup extends Group< AItem, AGroup> { } // works
class AItem extends Item< AItem, AGroup> { } // works
class BGroup extends Group< BItem, BGroup> { } // works
class BItem extends Item< BItem, BGroup> { } // works
class MixedGroup extends Group< AItem, MixedGroup> { } // fails
{
// your code goes here
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCWFic3RyYWN0IGNsYXNzIEdyb3VwPEkgZXh0ZW5kcyBJdGVtPEksIEc+LCBHIGV4dGVuZHMgR3JvdXA8SSwgRz4+ewogICAgIHByaXZhdGUgTGlzdDxJPiBpdGVtczsKICAgICBwdWJsaWMgTGlzdDxJPiBnZXRJdGVtcygpeyByZXR1cm4gbnVsbDsgfQogICAgIHB1YmxpYyB2b2lkIHNldEl0ZW1zKExpc3Q8ST4gaXRlbXMpeyB9Cn0KCmFic3RyYWN0IGNsYXNzIEl0ZW08SSBleHRlbmRzIEl0ZW08SSwgRz4sIEcgZXh0ZW5kcyBHcm91cDxJLCBHPj57CiAgICAgcHJpdmF0ZSBMaXN0PEc+IHN1Ykdyb3VwczsKICAgICBwdWJsaWMgTGlzdDxHPiBnZXRTdWJHcm91cHMoKXsgcmV0dXJuIG51bGw7IH0KICAgICBwdWJsaWMgdm9pZCBzZXRTdWJHcm91cHMoTGlzdDxHPiBzdWJHcm91cHMpeyB9Cn0KCmNsYXNzIEFHcm91cCBleHRlbmRzIEdyb3VwPEFJdGVtLCBBR3JvdXA+IHsgfSAgICAgICAgIC8vIHdvcmtzCmNsYXNzIEFJdGVtIGV4dGVuZHMgSXRlbTxBSXRlbSwgQUdyb3VwPiB7IH0gICAgICAgICAgIC8vIHdvcmtzCmNsYXNzIEJHcm91cCBleHRlbmRzIEdyb3VwPEJJdGVtLCBCR3JvdXA+IHsgfSAgICAgICAgIC8vIHdvcmtzCmNsYXNzIEJJdGVtIGV4dGVuZHMgSXRlbTxCSXRlbSwgQkdyb3VwPiB7IH0gICAgICAgICAgIC8vIHdvcmtzCmNsYXNzIE1peGVkR3JvdXAgZXh0ZW5kcyBHcm91cDxBSXRlbSwgTWl4ZWRHcm91cD4geyB9IC8vIGZhaWxzCgkKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCX0KfQ==
compilation info
Main.java:26: error: type argument Ideone.AItem is not within bounds of type-variable I
class MixedGroup extends Group<AItem, MixedGroup> { } // fails
^
where I,G are type-variables:
I extends Ideone.Item<I,G> declared in class Ideone.Group
G extends Ideone.Group<I,G> declared in class Ideone.Group
1 error
stdout