Robert Stagner created GROOVY-9074: -------------------------------------- Summary: CompileStatic Key: GROOVY-9074 URL: https://issues.apache.org/jira/browse/GROOVY-9074 Project: Groovy Issue Type: Bug Components: Compiler Affects Versions: 2.5.5 Reporter: Robert Stagner
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 {code:java} Collection<?> c = new ArrayList<String>(); c.add(new Object()); // Compile time error{code} Now, I decided to wrap this in a class and try it out in Java and then in Groovy. Here is the Java code {code:java} 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 } } {code} and here is the groovy code {code:java} 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(); } } {code} When I attempt to compile the Java code I get the following expected error {code:java} $ 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 ?{code} But, when I run the code through Groovy, I do not get a compile-time error. Instead, I get the following output {code:java} java.lang.Object@41a0aa7d{code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)