注:这篇文章是任玉刚老师公众号里的,此处是我的读后笔记
一、基本语法
1、在Groovy中,通过 def 关键字来声明变量和方法
2、在Groovy中,类型是弱化的,所有的类型都可以动态推断
3、在Groovy中,很多东西都是可以省略的,比如
- 语句后面的分号是可以省略的
- 变量的类型、方法的返回值类型、方法参数类型也是可以省略的
- 方法调用时,括号也是可以省略的
- 甚至语句中的return都是可以省略的
4、在Groovy中,对象默认的修饰符为public
二、String
在字符串中,可用
或者
{}将文本当成变量看待,并返回变量的值
三、Closure
闭包作为一种特殊的数据类型而存在,闭包可以作为方法的参数和返回值,也可以作为一个变量而存在,也可以当做函数一样使用;
当做函数时,有两种调用方式,一种是直接传参,一种是调用call函数;
如果闭包不指定参数,那么它会有一个隐含的参数 it;
四、List
def test = [100, “hello”, true]
如下:
test.size返回3
test[10]返回null,也就是说它不存在越界问题,而是直接返回null
test[1]=”world”会将”hello”替换为”world”;test[10]=”haha”,此时test.size返回11,test[7]返回null
test[10]=3后再test<<200,此时test.size返回12,而test[11]就是3
五、Map
def map = ["id":1,"name":"lei"]
println map["id"]
println map.name
Map的遍历:如果我们传递的闭包是一个参数,那么它就把entry作为参数;如果我们传递的闭包是2个参数,那么它就把key和value作为参数。
def map = ["id":1,"name":"ryg"]
map.each{key,value->
println key+":"+value
}
map.each{
println it.key+":"+it.value
}
六、普通文件的访问
eachLine方法也是支持1个或2个参数的,一个参数是line,两个参数是line和lineNo
def file = new File("a.txt")
file.eachLine{line,lineNo->
println lineNo+line
}
file.eachLine{line->
println line
}
七、xml文件的访问
<resources>
<declare-styleable name="CircleView">
<attr name="circle_color" format="color">#98ff02</attr>
<attr name="circle_size" format="integer">100</attr>
<attr name="circle_title" format="string">renyugang</attr>
</declare-styleable>
</resources>
def xml = new XmlParser().parse(new File("attrs.xml"))
println xml['declare-styleable'].@name[0]
println xml['declare-styleable'].attr[2].text()
八、Groovy的其他特性
1、在Groovy中,所有的Class类型,都可以省略.class
2、在Groovy中,Getter/Setter和属性是默认关联的。只有有属性就有Getter/Setter;同理,只要有Getter/Setter,那么它就有隐含属性。
3、在Groovy中,当对同一个对象进行操作时,可以使用with
Book bk = new Book()
bk.with {
id = 1
name = "android art"
press = "china press"
}
4、在Groovy中,可以将变量当做判断条件,如下:
if (name != null && name.length > 0) {}
可以替换为:
if (name) {}
5、在Groovy中,三元表达式可以更加简洁,如下
def name = new Book()
def result = name ?: "unknow"//?和:之前不能有空格,省略了?和:之间的name
println result
6、在Groovy中,非空判断可以用?表达式,如下
if (order != null) {
if (order.getCustomer() != null) {
if (order.getCustomer().getAddress() != null) {
System.out.println(order.getCustomer().getAddress());
}
}
}
可以简写为:
println order?.customer?.address
7、assert断言
在Groovy中,可以使用assert来设置断言,当断言的条件为false时,程序将会抛出异常
8、switch方法
在Groovy中,switch方法变得更加灵活,可以同时支持更多的参数类型:
def x = 1.23
def result = ""
switch (x) {
case "foo": result = "found foo"
// lets fall through
case "bar": result += "bar"
case [4, 5, 6, 'inList']: result = "list"
break
case 12..30: result = "range"
break
case Integer: result = "integer"
break
case Number: result = "number"
break
case { it > 3 }: result = "number > 3"
break
default: result = "default"
}
9、==和.is()
==就是比较两个值是否相同,相当于java中的equals()
如果需要比较对个对象是否是同一个,需要使用.is()
Object a = new Object()
Object b = a.clone()
assert a == b
assert !a.is(b)