-
Type:
Bug
-
Status: Open
-
Priority:
Major
-
Resolution: Unresolved
-
Affects Version/s: 2.5.5
-
Fix Version/s: None
-
Component/s: Compiler
-
Labels:None
While reading about Java Generics and wildcards (see https://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html), I came across the following code in the referenced oracle document
Collection<?> c = new ArrayList<String>(); c.add(new Object()); // Compile time error
Now, I decided to wrap this in a class and try it out in Java and then in Groovy.
Here is the Java code
import java.util.*; public class TestCollection { static Collection<?> c = new ArrayList<String>(); public static void main(String[] args) { c.add(new Object()); // Compile time error } }
and here is the groovy code
import java.util.*; import groovy.transform.CompileStatic; @CompileStatic public class TestCollection { static Collection<?> c = new ArrayList<String>(); public static void main(String[] args) { c.add(new Object()); // Compile time error println c.first(); } }
When I attempt to compile the Java code I get the following expected error
$ javac TestCollection.java TestCollection.java:7: error: incompatible types: Object cannot be converted to CAP#1 c.add(new Object()); // Compile time error ^ where CAP#1 is a fresh type-variable: CAP#1 extends Object from capture of ?
But, when I run the code through Groovy, I do not get a compile-time error. Instead, I get the following output
java.lang.Object@41a0aa7d
- links to