fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Ideone
  9. {
  10. abstract class Group<I extends Item<I, G>, G extends Group<I, G>>{
  11. private List<I> items;
  12. public List<I> getItems(){ return null; }
  13. public void setItems(List<I> items){ }
  14. }
  15.  
  16. abstract class Item<I extends Item<I, G>, G extends Group<I, G>>{
  17. private List<G> subGroups;
  18. public List<G> getSubGroups(){ return null; }
  19. public void setSubGroups(List<G> subGroups){ }
  20. }
  21.  
  22. class AGroup extends Group<AItem, AGroup> { } // works
  23. class AItem extends Item<AItem, AGroup> { } // works
  24. class BGroup extends Group<BItem, BGroup> { } // works
  25. class BItem extends Item<BItem, BGroup> { } // works
  26. class MixedGroup extends Group<AItem, MixedGroup> { } // fails
  27.  
  28. public static void main (String[] args) throws java.lang.Exception
  29. {
  30. // your code goes here
  31. }
  32. }
Compilation error #stdin compilation error #stdout 0.06s 380224KB
stdin
Standard input is empty
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
Standard output is empty