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 GenericClass<T> {
  9. }
  10.  
  11. abstract class AbstractClass<T, G extends GenericClass<T>> {
  12. public AbstractClass(Class<G> generic, T something) { }
  13. }
  14.  
  15. class GeneralClass<T> extends AbstractClass<T, GenericClass<T>> {
  16. public GeneralClass(Class<GenericClass> generic, T something) {
  17. super(generic, something); // !error, asking for Class<GenericClass<T>>
  18. }
  19. }
  20.  
  21. public class Main {
  22. public static void main(String[] args){
  23. GeneralClass<GenericClass<String>> foo = new GeneralClass<>(new Class<GenericClass<String>>(), "foo");
  24. }
  25. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:17: error: constructor AbstractClass in class AbstractClass<T#2,G> cannot be applied to given types;
        super(generic, something);    // !error, asking for Class<GenericClass<T>>
        ^
  required: Class<GenericClass<T#1>>,T#1
  found: Class<GenericClass>,T#1
  reason: actual argument Class<GenericClass> cannot be converted to Class<GenericClass<T#1>> by method invocation conversion
  where T#1,T#2,G are type-variables:
    T#1 extends Object declared in class GeneralClass
    T#2 extends Object declared in class AbstractClass
    G extends GenericClass<T#2> declared in class AbstractClass
Main.java:23: error: Class() has private access in Class
		GeneralClass<GenericClass<String>> foo = new GeneralClass<>(new Class<GenericClass<String>>(), "foo");
		                                                            ^
Main.java:23: error: cannot infer type arguments for GeneralClass<>;
		GeneralClass<GenericClass<String>> foo = new GeneralClass<>(new Class<GenericClass<String>>(), "foo");
		                                         ^
  reason: no instance(s) of type variable(s) T exist so that argument type Class<GenericClass<String>> conforms to formal parameter type Class<GenericClass>
  where T is a type-variable:
    T extends Object declared in class GeneralClass
3 errors
stdout
Standard output is empty