You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Robert Stagner (JIRA)" <ji...@apache.org> on 2019/04/10 17:30:00 UTC
[jira] [Created] (GROOVY-9074) CompileStatic
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)