Hi Paul,
wouldn't it make sense to combine flow typing with var x = RHS being
identical to typeof(RHS) x = RHS :
@Canonical static class Foo {
int x }
@InheritConstructors static class SonOfFooextends Foo {
int sonOfFooMethod() {2*x }
}
@Test @Ignore @CompileStatic void flowTypedVar() {
SonOfFoo f =new SonOfFoo(21)
//f = new Foo(-1) // compile time fails with "Groovyc: [Static type
checking] - Cannot assign value of type groovy.GroovyGeneralSpike$Foo to
variable of type groovy.GroovyGeneralSpike$SonOfFoo"
//f.sonOfFooMethod() // compile time fails with "Groovyc: [Static type
checking] - Cannot find matching method
groovy.GroovyGeneralSpike$Foo#sonOfFooMethod()." if(finstanceof SonOfFoo) {
println f.sonOfFooMethod()// works because of flow typing }
}
Cheers,
mg
On 23.03.2018 15:42, Paul King wrote:
The Parrot parser already has support for this at the grammar level
but we regard some of the current implementation details as experimental.
At the moment it is almost just an alias for "def" but discussions
have been around whether we can make the behavior closer to Java when
used within static Groovy code. We haven't defined exactly what this
would mean yet but roughly I suspect it could mean the same
inferencing as now but without flow typing.
Cheers, Paul.
On Fri, Mar 23, 2018 at 10:12 PM, Merlin Beedell
<mbeed...@cryoserver.com <mailto:mbeed...@cryoserver.com>> wrote:
I see that the newly release JDK 10 now supports the “var”
declaration for local variables where the type can clearly be
inferred from its initialiser:
http://openjdk.java.net/jeps/286 <http://openjdk.java.net/jeps/286>
I note that Groovy’s “def” syntax (among others) was mentioned but
rejected.
Would Groovy move to support this syntax in the same way (support
‘var’ only for Type Safe inferred declarations) or as a general
alias to the “def” keyword?
JDK 10 also has support for “docker” containers. The ecosystem
has certainly shifted!
Merlin Beedell