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 去关闭流了。。。


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


相关文章
|
8月前
|
JavaScript 前端开发 索引
JavaScript字符串检查:从基础到高级
【2月更文挑战第26天】
80 0
JavaScript字符串检查:从基础到高级
|
7月前
|
JavaScript 前端开发 测试技术
JavaScript进阶-正则表达式基础
【6月更文挑战第21天】正则表达式是处理字符串的利器,JavaScript中广泛用于搜索、替换和验证。本文讲解正则基础,如字符匹配、量词和边界匹配,同时也讨论了常见问题和易错点,如大小写忽略、贪婪匹配,提供代码示例和调试建议。通过学习,开发者能更好地理解和运用正则表达式解决文本操作问题。
56 1
|
7月前
|
Web App开发 JavaScript 前端开发
深入理解Playwright的高级功能和用法
Playwright是一个强大而灵活的Python库,用于自动化浏览器操作和测试。它提供了一套简洁、直观的API,使得编写可靠、可扩展的浏览器自动化脚本变得非常容易。无论是模拟用户交互、抓取网页数据还是进行端到端的Web应用程序测试,Playwright都是一个值得信赖的选择。 Playwright支持多种浏览器,包括Chrome、Firefox和WebKit(Safari)。这意味着您可以根据需要选择合适的浏览器来运行自动化脚本。Playwright还提供了跨浏览器的一致性保证,这意味着您可以在不同的浏览器上运行相同的脚本,并获得相似的结果。
|
8月前
|
XML 存储 JavaScript
JavaScript的基本语法是编程的基础
【4月更文挑战第20天】JavaScript的基本语法是编程的基础
56 5
|
8月前
|
JavaScript 前端开发
JavaScript 中运算符优先级:理解规则、实战应用与进阶技巧
【4月更文挑战第6天】了解 JavaScript 运算符优先级是编写清晰无误代码的关键。优先级规则决定了运算的顺序,从高到低包括一元、乘性、加性、关系、相等性等运算符。掌握优先级能避免逻辑错误,例如在表达式 `a * b + c` 中,乘法先于加法执行。实际应用中,使用括号可以明确运算顺序,提高代码可读性。注意避免混淆优先级,如赋值与比较操作。利用优先级简化逻辑判断,遵循编码规范,提升编程技能。通过不断学习和实践,加深对运算符优先级的理解,优化代码质量。
155 0
|
8月前
|
前端开发 JavaScript BI
JavaScript的过滤大师:深度解析Filter用法
JavaScript的过滤大师:深度解析Filter用法
238 0
|
8月前
|
前端开发 JavaScript 程序员
JavaScript高级技巧:深入探索JavaScript语言的高级特性和用法
JavaScript高级技巧:深入探索JavaScript语言的高级特性和用法
|
8月前
|
JavaScript 前端开发
【JavaScript保姆级教程】字符串拼接以及模板字符串
【JavaScript保姆级教程】字符串拼接以及模板字符串
436 0
|
缓存 JavaScript 前端开发
带你读《现代Javascript高级教程》二十、JavaScript修饰器:简化代码,增强功能(1)
带你读《现代Javascript高级教程》二十、JavaScript修饰器:简化代码,增强功能(1)
|
缓存 JavaScript 前端开发
带你读《现代Javascript高级教程》二十、JavaScript修饰器:简化代码,增强功能(2)
带你读《现代Javascript高级教程》二十、JavaScript修饰器:简化代码,增强功能(2)