本篇内容为Groovy学习笔记第31篇。继续学习语法相关的知识点。本篇的重点是Expressions(表达式)的相关知识点。,表达式是Groovy程序的构建块,用于引用现有值并执行代码以创建新值。,Groovy支持许多与Java相同的表达式,如下:,上面的表达式形式是java也支持的表达式。而Groovy也有一些自己独有的表达式:,Groovy还扩展了Java中用于成员访问的普通点表示法。Groovy通过指定某些感兴趣数据的层次结构中的路径,为访问分层数据结构提供了特殊支持。这些Groovy路径表达式称为GPath表达式。,GPath是一种集成到Groovy中的路径表达式语言,它允许识别部分嵌套的结构化数据。从这个意义上讲,它的目标和范围与XPath对XML的作用类似。GPath通常用于处理XML,但它确实适用于任何对象图。在XPath使用类似文件系统的路径表示法(部分由斜线/分隔的树层次结构)的情况下,GPath使用点对象表示法来执行对象导航。,例如,可以指定感兴趣对象或元素的路径:,在这两种情况下,GPath表达式都可以视为对象图上的查询。对于POJO,对象图通常由通过对象实例化和组合编写的程序构建;对于XML处理,对象图是解析XML文本的结果,通常使用XmlParser或XmlSlurper等类。有关在Groovy中使用XML的更多详细信息,请参阅处理XML。,PS:这里就不详细介绍如何处理XML文件了。如果想了解XML文件的处理可以阅读:http://docs.groovy-lang.org/docs/groovy-4.0.6/html/documentation/#processing-xml。如果不想阅读该英文文档,可以等待我后续的相关介绍,当查询从XmlParser或XmlSlurper生成的对象图时,GPath表达式可以引用在元素上使用@符号定义的属性:,PS:后面学习XML解析的时候将会详细介绍。这里简单说明一下。,让我们看一个简单对象图上GPath表达式的示例,即使用java反射获得的表达式。假设您在一个类的非静态方法中,该类具有另一个名为aMethodFoo的方法:,以下GPath表达式将获取该方法的名称:,更准确地说,上面的GPath表达式生成了一个字符串列表,每个字符串都是此上现有方法的名称,其中该名称以Foo结尾。,现在,假如Foo类中还有以下的几个方法:,则以下GPath表达式将获得aMethodBar 和aSecondMethodBar 方法名称,我们可以分解表达式this.class.methods.name.grep(~/.*Bar/)来了解如何计算GPath:,GPath表达式的一个强大特性是,集合的属性访问被转换为集合中每个元素的属性访问,结果被收集到集合中。因此,表达式this.class.methods.name可以用Java表示如下:,在存在集合的GPath表达式中也可以使用数组访问表示法:,PS: 1.grep()方法是一个正则表达式方法,用于查找字符串,方法中的传参是正则匹配哦。,2.在GPath表达式中,数组访问从零开始。,下面是一个XML文档和各种形式的GPath表达式的示例:,定义了一个xmlText变量,它的参数内容是一个xml。下面,通过GPath导航配置进行相关内容的读取:,本篇主要介绍了一下Groovy的表达式的定义和GPath表达式的简单定义。其中GPath是java中没有的写法。可以支持多级对象结构,也可以用于Json,XMl的解析中来。,以上相关内容可以参考Groovy官方文档:Groovy Language Documentation (groovy-lang.org),下一篇继续学习语法的相关知识。如果觉得总结的还行希望能够点个赞谢谢。
© 版权声明
文章版权归作者所有,未经允许请勿转载。