当前位置: 首页 > 后端技术 > Java

初识Groovy

时间:2023-04-02 00:12:23 Java

初识Groovy介绍Groovy是一种JVM语言,所以只要有JVM就可以执行。而且Groovy和Java可以互相调用,测试很顺利。它有多光滑?即.java和.groovy文件可以共存于Java工程中,并且可以相互调用。Groovy是一种引入了许多有趣特性的动态语言。如果把Java比作正则脚本,Groovy就是运行脚本,开发效率非常高。此外,GroovyJDK包含许多用于舒适开发的实用工具。目标Groovy是一种用于Java平台的可选类型的动态语言,具有许多受Python、Ruby和Smalltalk等语言启发的功能,使使用类Java语法的Java开发人员可以使用它们。与其他替代语言不同,它被设计为伴侣,而不是Java的替代品。——GroovyInAction(第44页)我们的目标不是取代Java,而是成为Java的合作伙伴。一些在Java中处理起来非常复杂的过程,交给了Groovy。简单来说,有两种运行模式:编译:在编译运行时编译成.class文件:由GroovyShell作为脚本动态执行。毕竟,它是一种动态语言。出于性能考虑,核心代码和底层代码推荐使用Java。对于业务逻辑和需要快速变化的逻辑,可以试试Groovy。IDE支持由于它是一种动态语言,因此IDE支持极为重要。目前IDEA支持的很好,默认配置中加入了groovy插件。如何建造它?构建配置文件配置评测Gradle.groovy简单,最好的构建方式,但是没有人用过Maven.XML虽然复杂,但是大家都在用,熟悉了,推荐使用maven引入Ant\\淘汰,不讨论mavengroovy有多少推荐使用GMavenPlus。具体配置方法参考:Groovy+Java混合编程解决方案:GMaven-SegmentFault想想有多爽?POGO在Java项目中,我们称纯数据类为POJO。POJO经常需要添加一堆构造方法和getters和setters。虽然可以用IDE或者lombok生成,但是还是很啰嗦。POGO可以在Groovy中构造,classPerson{StringidStringnameStringtoString(){return"$id,$name"}}默认构造,Map构造,getter,setter都是默认的,非常简洁。defperson=newPerson(id:'67',name:'beautifulboy')printlnperson.getName()另外POGO也可以做成不可变类型,连final都保存了,@ImmutableclassImmutablePoint{doublexdoubleyStringtoString(){return"($x,$y)"}}关于POGO的一些实用函数,可以参考《MakingJavaGroovy》第四章。GString类似于Python的f-string和JS的模板字符串。GString使用字符作为变量占位符。下面是GroovyInAction文中的例子(第84页):defme='Tarzan'defyou='Jane'defline="me$me-you$you"assertline=='meTarzan-youJane'defdate=newDate(0)defout="年$date.year月$date.month日$date.date"assertout=='Year70Month0Day1'out="Dateis${date.toGMTString()!”//|#3带断言的完整语法=='Dateis1Jan197000:00:00GMT!'//|#3大括号//多行GStringsdefsql="""SELECTFROMMyTableWHEREYear=$date.year"""assertsql=="""SELECTFROMMyTableWHEREYear=70"""out="my0.02$"//|#5Literaldollarsignassertout=='my0.02$'jsonimportgroovy.json.JsonSlurperStringurl='http://api.icndb.com/jokes/random?limitTo=[nerdy]'StringjsonTxt=url.toURL().textdefjson=newJsonSlurper().parseText(jsonTxt)defjoke=json?.value?.jokeprintlnjoke接口调用,json解析一气大功告成,取值过程很简单:json?.value?.joke,不需要一堆ifelse判断,也不需要Optional等方法取值。单元测试Groovy让测试Java变得更容易——MakingJavaGroovy如果你想使用Groovy,但对将它应用到业务逻辑有疑虑,那么它非常适合编写单元测试。不会影响业务代码,可以慢慢上手。单元测试写得很简洁。classCutoutCustomerIdTagTest{@Testvoidcutout(){defctx=newDmContext(uid:'001122')defcutId=newCutoutCustomIdTag().doTag(ctx)assertcutId=='22'}}classPermissionTest{@Test无效检查(){defpermission=newPermission(modify:['Tom','Jerry'])assertpermission.checkModify('Tom')assertpermission.checkModify('Jerry')}}参考GroovyInAction2edMakingJavaGroovyGroovy官网