Groovy之高级语法

简介: Groovy之高级语法

json 操作


将实体对象转换Wie Json


def list = [new Person(name: "张三", age: 20),
            new Person(name: "李四", age: 22),
            new Person(name: "王五", age: 25)];
def json = JsonOutput.toJson(list)
println json //输出 json 串
println JsonOutput.prettyPrint(json) //按照格式输出


将 json 串转为对象


List<Person> newJson = new JsonSlurper().parseText(json) as List<Person>
println newJson[0].name + "----" + newJson[0].age


XML


xml 对于我来说没用过,所有就。。。


文件操作


遍历文件


def file = new File("../../GroovySpecifcation.iml")
//遍历文件
file.eachLine {
    println it
}


读取文件


def result = file.getText() //获取文件中内容
println result
def result = file.readLines()//将每一行的数据放在列表中
println result


获取文件中一部分内容


def reader = file.withReader { //获取文件中的一部分内容
    read ->
        char[] buffer = new char[100];
        read.read(buffer)
        return buffer
}
println reader


copy 一个文件


static def copy(String patch, String newFile) {
    //创建目标文件
    def file = new File(newFile)
    if (!file.exists()) {
        file.createNewFile()
    }
    //copy
    new File(patch).withReader {
        //闭包参数
        read ->
            //将文件读取到列表中
            def lines = read.readLines()
            file.withWriter {
                write ->
                    //遍历列表,将数据写入到目文件中
                    lines.each {
                        line ->
                            write.append(line + "\n")
                    }
            }
    }
    return true
}
copy("../../GroovySpecifcation.iml",
        "../../GroovySpecifcation2.iml")


读写对象


//保存对象
static def saveObject(Object o, String filePath) {
    //创建目标文件
    def file = new File(filePath)
    if (!file.exists()) {
        file.createNewFile()
    }
    file.withObjectOutputStream {
        //闭包参数
        out ->
            out.writeObject(o)//保存对象到指定文件中
    }
}
//读取对象
static def readObject(String patch) {
    File f = new File(patch)
    f.withObjectInputStream {
        read ->
            def obj = read.readObject() //读取对象
            Person p = obj as Person  //转型
            println p.name + "---" + p.age
    }
}
saveObject(new Person(name: "张三", age: 20), "../../person")
readObject("../../person")


注意:这里的 Person 对象需要被序列化


总结


到这里基础的就学的差不多了。感觉还是挺简单的,因为是基于 java 的,所以学起来还是很友好。


groovy 和 java 的区别


写法上:非常随意,没有 java 那么多的限制,例如 不用写逗号,return 可写 可不写,可以直接当做脚本来写,main 方法 和 class 都不需要。

功能上:功能更全面吧,在 java 的基础上有添加了很多方法,并且使用起来非常简单,特别是闭包的使用,简直了。。还有强大的元编程,可以再运行期间动态的生成字段,方法等,非常强大。并且兼容 java 的所有功能

作用上:可以写 应用,也可以写脚本,但大多时候是用来写脚本的。


重要的地方


强定义和弱定义,变量,字符串,循环等基本的语法


数据结构,列表,映射,范围等。注意列表默认是 ArrayList ,映射LinkedHashMap ,范围则是继承自列表的。需要需要改变可以通过 as 来修改,如 def list = [1,4,6] as LinkedList。


类,方法,面向对象,这些基本和 java 差不多,只不过 定义方法时 def 代表的返回值就是 Object 了。而 类默认继承的是 GroovyObject,而不是 Object。


闭包,这个是一个比较重要的东西,说一下笔者的理解:可以把它看成一个代码块,这个代码块有参数,有返回值,而且还可以作为参数传递。groovy 中的很多方法都需要传入一个闭包,这个闭包的功能由我们自己来确定,groovy 在这个方法的内部就会调用闭包,然后闭包就会执行。所以在使用 groovy 一写需要传入闭包的方法时,不妨先看一下方法内部的实现,就算看不懂,你也需要看一下方法内部在调用闭包是有没有传入参数,传了几个,是什么类型!!!


json格式,文件的处理,感觉实在 java 的基础上进行封装,整体上感觉方便多了,再也不是要 try catch 去关闭流了。。。


元编程,在运行的时候可以动态的注入字符,方法,静态方法,默认是对当前的文件生效,但是可以修改配置,使其全局生效。


相关文章
|
4月前
|
Python
Python的高级语法及许多特性
Python的高级语法及许多特性
38 0
|
缓存 编译器 C++
C++高级语法
● C++使用class定义一个类,使用struct定义一个结构体 struct的默认成员权限是public,class的默认成员权限是private,除此之外二者基本没有差别。
79 0
|
Java 编译器 程序员
“C++基础入门指南:了解语言特性和基本语法”(上)
“C++基础入门指南:了解语言特性和基本语法”(上)
49 0
|
存储 安全 编译器
“C++基础入门指南:了解语言特性和基本语法”(下)
“C++基础入门指南:了解语言特性和基本语法”(下)
83 0
|
存储 编译器 C++
“C++基础入门指南:了解语言特性和基本语法”(中)
“C++基础入门指南:了解语言特性和基本语法”(中)
86 0
|
Java
【Groovy】Groovy 代码创建 ( 使用 Java 语法实现 Groovy 类和主函数并运行 | 按照 Groovy 语法改造上述 Java 语法规则代码 )
【Groovy】Groovy 代码创建 ( 使用 Java 语法实现 Groovy 类和主函数并运行 | 按照 Groovy 语法改造上述 Java 语法规则代码 )
236 0
【Groovy】Groovy 代码创建 ( 使用 Java 语法实现 Groovy 类和主函数并运行 | 按照 Groovy 语法改造上述 Java 语法规则代码 )
|
SQL 程序员 数据库
【Kotlin】Kotlin 领域特定语言 DSL 原理 一 ( DSL 简介 | 函数 / 属性扩展 )
【Kotlin】Kotlin 领域特定语言 DSL 原理 一 ( DSL 简介 | 函数 / 属性扩展 )
284 0
|
Java BI
《Groovy语言规范》-语法(二)
4.6.斜杠字符串 除了通常的带引号字符串,groovy提供斜杠字符串,使用/作为分隔符。斜杠字符串对于定义正则表达式和模式是特别有用的,因为不需要转义反斜杠。 一个斜杠字符串: def fooPattern = /.
1840 0