方法调用
定义的类的变量会自动生成get和set方法
class Person {
def name
def age
}
def person = new Person()
person.setName("Jack")
println person.getName() //Jack
println person.name //Jack
赋值和取值会自动调用set和get方法
class Person {
def name
def age
def setName(name) {
println 'call set'
this.name = name
}
def getName() {
println 'call get'
return name
}
}
def person = new Person()
person.name = 'jack'
println person.name //Jack
//输出:
//call set
//call get
//jack
class Person {
def name
def age
def setName(name) {
this.name = name
}
def getName() {
return name + "!"
}
}
def person = new Person()
person.name = 'jack'
//以下四种都会调用get方法,没区别
println person.name //jack!
println person.'name' //jack!
def str = 'name'
println person."$str" //jack!
println person['name'] //jack!
//直接获取name的值
println person.@name //jack
class Person {
def name
def age
def setName(name) {
println 'setName'
this.name = name
}
def getName() {
println 'getName'
return name + "!"
}
}
Person p = new Person(name:'jack')
println p.name
//输出
//setName
//getName
//jack!
在构造函数中可以给对象的变量赋默认值,赋值时会自动调用该变量的set方法
def func(x = 0, y, z) {
println "$x - $y - $z"
}
func(1, 5, x: 1, y: 2, z: 3)
func(1, x: 1, y: 2)
func(1, [1, 2, 3], 4)
func(1, [1, 2, 3])
//输出
//[x:1, y:2, z:3] - 1 - 5
//0 - [x:1, y:2] - 1
//1 - [1, 2, 3] - 4
//0 - 1 - [1, 2, 3]
键值对默认会赋值给第一个参数
def str = 'org.codehaus.groovy:groovy-all:2.3.11'
def (group,name,version) = str.split(":")
println group + '--' + name + '--' + version
def (group2,name2) = str.split(":")
println group2 + '--' + name2
//def (group3,name3,version3,x) = str.split(":") //Error:ArrayIndexOutOfBoundsException
//输出
//org.codehaus.groovy--groovy-all--2.3.11
//org.codehaus.groovy--groovy-all
interface OnClickListener {
void onClick()
}
void func(OnClickListener listener) {
listener.onClick()
}
func {
println 'call'
}
//输出
//call
interface OnClickListener {
void onClick()
}
void func(OnClickListener listener) {
listener.onClick()
}
OnClickListener listener = {
println 'call'
}
func listener
//输出
//call
调用函数时 如果需要传递一个接口,那么可以使用闭包来代替
interface A{
void a()
void b()
void c()
}
def a = {
println 'aaa'
} as A
a.a()
a.b()
a.c()
//输出
//aaa
//aaa
//aaa
as能够将闭包转换成函数需要的接口对象
操作符重载
class Weight {
def number
def plus(weight) {
if(weight instanceof Number) {
number += weight;
} else if(weight instanceof Weight) {
number += weight.number
} else {
throw new MissingMethodException('plus',weight.class,weight)
}
}
def isCase(a) {
if(a instanceof Weight && a.number == 26 && number == 100 ) {
true
} else {
false
}
}
}
def weight = new Weight(number: 10)
def weight2 = new Weight(number: 11)
println weight + 5
println weight + weight2
switch (weight) {
case new Weight(number:99):
println "AAA"
break
case new Weight(number:100):
println "BBB"
break
case 10:
println "CCC"
break
}
//输出
//15
//26
//BBB
switch(a) { case(b) : } ==> b.isCase(a)
网友评论