Рубрики
Без рубрики

Apache Groovy с синтаксисом Java 7 и 8

Начиная с Apache Groovy 2.6 (последняя версия 2.6.0-альфа-2 на 16 ноября 2017 года), он может использовать синтаксис лямбда из… Помеченный как заводной, java.

Начиная с Apache Groovy 2.6 (последняя версия 2.6.0-альфа-2 на 16 ноября 2017 года), он может использовать синтаксис лямбда из Java 8 и попробовать с ресурсами из Java7. Самые крутые приложения уже любят эти функции.(Закрытие) Но адаптация к синтаксису Java действительно важна для разработчиков Java, которые еще не используют Apache Groovy.

Установите Apache Groovy, затем измените имя файла с Foo.java в Foo.groovy и выполнить просто groovy Foo.groovy . Разработчик Java снова равен разработчику Apache Groovy, начиная с Apache Groovy 2.6.

Но эти функции еще не являются стандартными для Apache Groovy. Apache Groovy 2.6 поддерживает опционально, Apache Groovy 3 поддерживает по умолчанию. Apache Groovy 2.6 все еще находится в альфа-фазе. но он уже вышел. мы можем это проверить!

Установите через sdkman. Apache Groovy 2.6 еще не поддерживает синтаксис Java8 по умолчанию Должна быть указана опция -Dgroovy.antlr4=true при выполнении groovy.

[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&

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
    }
}

// Lamda syntax is available!
java.util.function.Function test = (i) -> {"${i} !?"}
assert "123 !?" == test.apply(123)

// Lambda with streams.
List 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. Но этот новый синтаксический анализатор действительно полезен для разработчиков Java, изучающих Apache Groovy.

Оригинал: “https://dev.to/saba1024/apache-groovy-with-java-7-and-8-syntaxs-i5”