由于Apache Groovy 2.6(最新版本在2017年11月16日为2.6.0-alpha-2),它可以使用Java8中的Lambda语法和Java 7中的try-with-resources。 Groovist像这些功能一样经常使用(关闭) 但是适应Java的语法对于吸引尚未使用Apache Groovy的Java开发人员来说非常重要。
安装Apache Groovy,然后从以下位置更改文件名Foo。java至Foo。groovy并简单地执行常规。 Java Developer equals Apache Groovy Developer again since Apache Groovy 2。6。
但是此功能在Apache Groovy上尚不标准。 Apache Groovy 2.6可选地支持,默认情况下支持Apache Groovy 3。 Apache Groovy 2.6尚处于Alpha阶段。 但是已经出来了 我们可以测试一下!
Install Apache Groovy 2.6
通过sdkman安装。 Apache Groovy 2.6尚未默认支持Java8语法 It have to be specified an option -Dgroovy.antlr4 = true通过执行常规。
[koji:~]$ sdk install groovy 2.6.0-alpha-2
[koji:~]$ sdk use groovy 2.6.0-alpha-2
# to activate Java7/9 syntax.
[koji:~]$ groovyConsole -Dgroovy.antlr4=true&
# of course you can JAVA_OPTS.
[koji:~]$ echo $JAVA_OPTS
[koji:~]$ export JAVA_OPTS="-Dgroovy.antlr4=true"
[koji:~]$ echo $JAVA_OPTS
-Dgroovy.antlr4=true
[koji:~]$ groovyConsole&
try-with-resources
def file = new File("/tmp/test.txt")
/*
def fileReader = file.newReader()
println fileReader.ready()
fileReader.close()
println fileReader.ready() // java.io.IOException: Stream closed. of ocurse :)
*/
// try-with-resources ! Since Apache Groovy 2.6 can use!
try(BufferedReader br = file.newReader()) {
br.eachLine {
println it
}
} catch(Exception e) {
println e
}
// Normal Groovy way!
file.withReader {BufferedReader br ->
br.eachLine {
println it
}
}
Use Lambda
// Lamda syntax is available!
java.util.function.Function<Integer, String> test = (i) -> {"${i} !?"}
assert "123 !?" == test.apply(123)
// Lambda with streams.
List<Integer> list = [1,2,3,4,5]
assert [10, 8, 6, 4, 2] == list.stream().map((a) -> {a * 2}).sorted((a, b) -> { return b - a; }).collect()
// Normal Groovy way!
assert [10, 8, 6, 4, 2] == list.collect{it * 2}.sort{a,b -> b <=> a}
我比Java更喜欢Groovy风格。 但是,这个新的语法解析器对于Java开发人员学习Apache Groovy确实很有帮助。