Android中涉及到的Groovy语法
来源:互联网 发布:浙大网络线怎么用 mac 编辑:程序博客网 时间:2024/05/16 19:06
前言:
大家都知道,AndroidStudio的项目构建工具是Gradle,Gradle的代码语言是Groovy,对于一个Android应用来说,开发的时候,即使我们不懂Gradle,不懂Groovy,也是能正常开发的,但是一旦遇到相关问题,难免会手足无措,所以,搞明白这些知识点显得十分有必要。本篇blog主要是简单介绍Groovy的语言知识,完全是自己的学习笔记,能帮助到大家就最好了。
Groovy
- Groovy 是在 java 平台上的 具有像 Python, Ruby 和 Smalltalk 语言特性的灵活动态语言 , Groovy 保证了这些特性像 Java 语法一样被 Java 开发者使用。所以熟悉java的我们学习Groovy非常得心应手。
- 注释和java一样,java那那种注释规则完全使用
- 不需要分号作为语句的结尾标识,显得更加简洁
- 定义变量的时候,类型可以不申明,def关键字可有可无
varvar =1int var=1def int var =1
以上四种写法都是正确的
- 基本数据类型和java一致,主要有byte,short,int,long,double,char,boolean,同时还有其对应的对象装饰类型
- String字符串有三种表示方式,分别为 ‘a ’ “a” ”’a”’,和Python等类型,单引号和java的双引号一样,双引号可以利用$表示变量的值,三引号可以保证里面的内容格式完全保留。比如
var1='a'var2="hello $var"var3='''abb'''
- 方法定义时,最后一行代码代码表示返回值,return可加可不加,指定了返回值类型可不加def,没有则必须要加def,例如
def func1(){//此时不可以省略,动态返回类型 println 'hello world'// }String func2(){//def可以省略,返回值类型必须和定义的类型一致,不然出错'hello world'}
- 容器类,主要有List,Map和Range
表示为
def list1=[1,'1',true]//和java不同,不要是同一种类型 list1[100]=2//此时list1的长度是101了def map1['key1'='value','key2'='value'],key必须是String类型,用中括号,不同于java的大括号range其实是list的扩展def list2=1..5//list2=[1,2,3,4,5]def list3=1..<5//list3=[1,2,3,4]
注意点都写在了注释上了。
闭包Closure
闭包在gradle中随处可见,只要这个特性掌握好了,再看gradle中语法就基本没有其他障碍了。
闭包在很多语言中都有,比如Kotlin的闭包,和java的lambda表达式有点类似。
1.定义格式
例如:
def aClosure = {// 闭包是一段代码 , 所以需要用花括号括起来..String param1, int param2 -> //这个箭头很关键。箭头前面是参数定义,箭头后面是代码println "this is code" //这是代码,最后一句是返回值,}
定义格式如下:
def xxx = {paramters -> code} //或者def xxx = {无参数,纯 code} 这种 case 不需要->符号
同时,如果闭包只有一个参数,默认为it,可以不显式指定
def closure1={println "hello $it"}
2.省略圆括号
如果一个函数最后一个参数是Closure对象,那么调用该函数时就可以省略该方法括号
public static <T> List<T> each(List<T> self, Closure closure)//self这个参数值该类对象,调用方法时不传,和Python类似def iamList = [1,2,3,4,5] //定义一个 ListiamList.each{ //调用它的 each,这段代码的格式看不懂了吧?each 是个函数,圆括号去哪了?println it}
在gradle中,我们会看到很多省略括号的写法,值保留大括号,现在想想是不是这么回事呢
高级特性
1.XML 操作
Groovy 中,XML 的解析提供了和 XPath 类似的方法,名为 GPath。这是一个类,提供相应 API
例子为:text.xml文件
<response version-api="2.0"><value><books><book available="20" id="1"><title>Don Xijote</title><author id="1">Manuel De Cervantes</author></book><book available="14" id="2"><title>Catcher in the Rye</title><author id="2">JD Salinger</author></book><book available="13" id="3"><title>Alice in Wonderland</title><author id="3">Lewis Carroll</author></book><book available="5" id="4"><title>Don Xijote</title><author id="4">Manuel De Cervantes</author></book></books></value></response>
下面利用GPath进行解析操作:
//第一步,创建 XmlSlurper 类def xparser = new XmlSlurper()def targetFile = new File("test.xml")//轰轰的 GPath 出场GPathResult gpathResult = xparser.parse(targetFile)//开始玩 test.xml。现在我要访问 id=4 的 book 元素。//下面这种搞法,gpathResult 代表根元素 response。通过 e1.e2.e3 这种//格式就能访问到各级子元素....def book4 = gpathResult.value.books.book[3]//得到 book4 的 author 元素def author = book4.author//再来获取元素的属性和 textvalueassert author.text() == ' Manuel De Cervantes '获取属性更直观author .@id == '4' 或者 author['@id'] == '4'属性一般是字符串,可通过 toInteger 转换成整数author.@id.toInteger() == 4
好了。GPath 就说到这。再看个例子。我在使用 Gradle 的时候有个需求,就是获取
AndroidManifest.xml 版本号(versionName)。有了 GPath,一行代码搞定,请看
def androidManifest = new XmlSlurper().parse("AndroidManifest.xml")println androidManifest['@android:versionName']或者println androidManifest.@'android:versionName'
以后AndroidManifest.xml文件的相关信息都可以轻松的写在gradle文件中了,不是吗?
阅读全文
0 0
- Android中涉及到的Groovy语法
- Android:Groovy基础语法
- Android 开发中涉及到的设计模式
- android开发中涉及到的度量单位
- Groovy的基础语法
- Groovy的基础语法
- Groovy的基础语法
- Groovy的语法入门
- <groovy>扩展java的语法
- android开发过程中涉及到的“概念”摘要
- 什么是android开发中涉及到的渠道号?
- Android中涉及到的焦点问题,focusable,clickable,enabled
- android中自定义view涉及到的绘制知识
- groovy语法
- Android涉及到的设计模式
- android涉及到的设计模式
- Android涉及到的设计模式
- Android 涉及到的设计模式
- n个数里最小的k个
- mysql优化之表的设计
- 【软工】黑白盒
- Linux到底是什么,它是怎么诞生的,它的诞生有怎样的意义!
- 数据结构实验之排序六:希尔排序
- Android中涉及到的Groovy语法
- Web前端之HTML
- [kuangbin带你飞]专题1 简单搜索 H
- 指针浅析
- xcode里用mysql
- Java设计模式2-工厂模式
- opencv2中代码在opencv3下运行时报错的修改一些方法
- mysql高版本出现ssl警告
- JavaWeb实现好友验证的思路