Groovy static compilation (@CompileStatic) turns types of class fields into `Object`

203 views Asked by At

Compiling the following Groovy class

@CompileStatic
class StaticCompileTest {

   private def fieldInt = 3

}

results in this class, when decompiling the .class file:

public class StaticCompileTest implements GroovyObject {
    private Object fieldInt;
}

Changing the field to be final does not change the situation.

Why is the Groovy compiler in this case not able to derive the type?

1

There are 1 answers

1
melix On BEST ANSWER

Because it's inherently unsafe to assume that the type won't change.

see http://docs.groovy-lang.org/latest/html/documentation/#_variables_vs_fields_in_type_inference