加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

用Groovy思考 第二章 Groovy语言的关键特征

发布时间:2020-12-14 16:53:06 所属栏目:大数据 来源:网络整理
导读:用Groovy思考?第二章 Groovy语言的关键特征 作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs 1. 断言Assertion断言:用于判断预期的条件是否为真。例子:def list = [1,2,'x']assert list.size()==32. AST转换期使用的注释AST转换的注释:Gr

用Groovy思考?第二章 Groovy语言的关键特征

作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs
1. 断言Assertion断言:用于判断预期的条件是否为真。例子:def list = [1,2,'x']assert list.size()==32. AST转换期使用的注释AST转换的注释:Groovy提供了在AST转换时的注释,比如@Singleton注释。当Groovy编译器编译Groovy脚本和类时,Groovy解析器(编译器的前端)会在为类创建最终的字节码之前创建一个抽象语法树AST,AST是源码在内存中的表现形式,比较类、方法、属性、语句、变量等。@Singletonclass SomeSingleton{// ...}@Singleton注释指示编译器创建一个私有的构造函数和一个静态方法,在AST转换时产生一个单态实例。3. 建立器Builder在Java中要生成一个最简单的XML文档都是很费劲、费时的。Groovy通过内建的Builder类简化了XML的生成。如下面的例子所示:def builder = new groovy.xml.MarkupBuilder()builder.employee{? name 'John Doe'? gender 'male'}执行后输出:<employee>? <name>John Doe</name>? <gender>male</gender></employee>Result: employee4. 闭包Closure闭包:Groovy的闭包是一个可重用块,包含在大括号{}中,闭包可以被赋值给属性或变量,或作为参数传递给方法。例:def name = 'Chris'def printClosure = { println "Hello,${name}" }printClosure()name = "Li Sir"printClosure()执行后,代码输出:Hello,ChrisHello,Li Sir5. GDKGroovy是由完整的Groovy语言、Groovy指定的库和GDK共同组成。GDK是现有JDK基础上的Groovy扩展。GDK = Groovy JDK详细内容可参考:http://groovy.codehaus.org/groovy-jdk/6. 元编程Metaprogramming元编程:意味着写一个程序来创建、查询和操纵其它的程序或者是自身。元编程既可以出现在编译时,也可出现在运行时。编译时元编程的契约是字节码的生成。在Groovy中,编译时元编程使得你可以在产生最终的字节码之前修改AST。在Groovy中,运行时的元编程是使用元对象协议实现的。例:String.metaClass.firstUpper = {->? return delegate[0].toUpperCase() + delegate[1..delegate.length()-1]}println "iiii".firstUpper()执行代码,输出:Iiii7. 本地JSON支持本地JSON支持:JSON是轻量级的数据交换格式,用于替代XML,作为网络上结构化数据的传输和序列化。如下面的读JSON例子:import groovy.json.JsonSlurperdef slurper = new JsonSlurper()def result = slurper.parseText('{"person":{"name":"John Doe","age":40,"cars":["BMW","FORD"]}}')println result.person.nameprintln result.person.ageprintln result.person.cars.size()println result.person.cars[0]println result.person.cars[1]执行代码的结果如下:John Doe402BMWFORD8. 本地支持Lists和Maps集合Groovy增强和改进了Java集合类的声明语法和附带的方法。Groovy为List和Map包含了第一级的构造,还添加了新集合类型:Range。例子:authors = ['Vishal','Chris','Joseph','Jim']println authorsprintln authors[0]程序输出:[Vishal,Chris,Joseph,Jim]Vishal9. 本地支持正则表达式10. Groovy只有对象在Groovy中,一切都是对象,没有原子类型。在Groovy中,所有的操作符都是方法调用。11. 字符串插值字符串插值:是字符串内替代表达式或变量的一种能力。Java不支持字符串插值,必须手动的连接值。例子:def lastName = "Layka"def fullname = "Vishal ${lastName}"println fullname输出:Vishal Layka12. 静态和动态类型静态和动态类型:Groovy在声明变量时支持静态和动态类型。动态类型使用def关键词。比如:def var = 10var = 'It's a String"可见,定义的类型可变。13. 静态类型检查静态类型检查:Groovy 2.0引入了@TypeChecked注释,它可以对需要进行静态类型检查的方法或类进行注释。import groovy.transform.TypeCheckedvoid doIt(){}@TypeCheckedvoid test(){? dott() //compilation error:cannot find matching method dott()}程序运行时提示错误信息:1 compilation error:[Static type checking] - Cannot find matching method ConsoleScript15#dott(). Please check if the declared type is right and if the method exists.?at line: 5,column: 314. 静态编译静态编译:Groovy 2.0通过@CompileStatic注释使得静态编译成为可能。此模式消除了运行时的动态调度的开销。例如:import groovy.transform.CompileStatic@CompileStaticint doubleIt(int num){? 2*num}assert doubleIt(3) == 6使用@CompileStatic注释将会静态的编译代码,产生的字节码和Java字节码运行的一样快。此注释可以注释类和方法。15. 可选语法访问修饰符:在Groovy中,类无访问修饰符则被认为是public;而属性无访问修饰符则认为是private。方法无访问修饰符则认为是public。而在Java中,方法和域默认是包访问范围。16. 检查异常检查异常:在Groovy中,检查异常无需声明或捕获,Groovy会自动封装异常作为RuntimeException。17. Getters和SettersGroovy引入了GroovyBeans,它支持属性的直接使用,与public域相似。18. 导入语句默认情况下,Groovy总是导入以下的包:groovy.lang.*groovy.util.*java.lang.*java.util.*java.util.regex.*java.net.*java.io.*java.math.BigDecimal,java.math.BigInteger19. 圆括号()和分号圆括号()和分号:在Groovy中都是可选的。20. 返回类型和return关键字返回类型和return关键字:它是方法中的最后一条语句,而且return关键字是可选的。最后一条语句的结果值总是会返回方法调用。如果def关键字被用于返回类型,那么Groovy会在运行时动态地计算返回类型——取决于具体返回的值。例如:def greeting(){? result = "Hello world"? result}println greeting()输出结果为:Hello world

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读