1. Groovy方法调用
// groovy方法调用
class Person{
def name
def age
def getName() {
println 'getName'
return name
}
void setName(name) {
println 'setName'
this.name = name
}
}
def person = new Person()
// get set 方法会自动生成,并且会自动调用get set方法
//person.setName('Jack')
person.name = 'jack'
//setName
println person.name
//getName
//jack
println person.'name'
//getName
//jack
def str = 'name'
println person."$str"
//getName
//jack
println person['name']
//getName
//jack
// 如果不想调用 get 方法 ,用@
println person.@name
//jack
println('=====================================')
class Person2{
def name
def age
def getName() {
return name + "_"
}
void setName(name) {
this.name = name
}
def excute(x,y,z){
println "$x $y $z"
}
}
// 键值对的方式 给参数赋值
def person2 = new Person2(name:'jack')
println person2.name // jack_
//person2.excute(x:1,y:2,z:3) // 报错了
person2.excute(x:1,y:2,z:3,4,5) // [x:1, y:2, z:3] 4 5 把键值对赋值给了第一个参数
person2.excute(4,5,x:1,y:2,z:3) // [x:1, y:2, z:3] 4 5 还是把键值对赋值给了第一个参数
person2.excute(4,[1,2,3],5) // 4 [1, 2, 3] 5
println('=====================================')
def str2 = 'org.codehaus.groovy:groovy-all:2.3.11'
// java写法 吧:分隔开
def array = str2.split(":")
println array // [org.codehaus.groovy, groovy-all, 2.3.11]
def (group,name,verson) = str2.split(":")
println group // org.codehaus.groovy
println name // groovy-all
println verson // 2.3.11
//def (group2,name2,verson2,classifier) = str2.split(":") // 报错java.lang.ArrayIndexOutOfBoundsException: 3
println('=====================================')
interface OnclickListener{
void onClick()
}
void func(OnclickListener listener){
println listener.class // class com.sun.proxy.$Proxy5 是个代理,使用代理的方式 调用闭包
listener.onClick()
}
OnclickListener listener = {
println 'onclick listenrer'
}
func{ // 传递一个闭包进去,其实调用闭包,是调用闭包里面的call方法
println 'onclick' // onclick
}
func listener // onclick listenrer
println('=====================================')
interface OnclickListener3{
void onClick3(str,str1)
}
void func3(OnclickListener3 listener3){
println listener3.class // class com.sun.proxy.$Proxy5 是个代理,使用代理的方式 调用闭包
listener3.onClick3('hello','closure')
}
OnclickListener3 listener3 = {
i,j->
println "$i,$j"
}
func3 listener3 // hello,closure
println('=====================================')
interface OnclickListener4{
void after()
void doing()
void before()
}
OnclickListener4 listener4 = {
println "hello"
} as OnclickListener4
listener4.doing() // 报错 因为他有3个方法,不知道给那个方法
// 加上 as as OnclickListener4 , -》 hello
listener4.after() // 加上 as as OnclickListener4 , -》 hello
listener4.before() // 加上 as as OnclickListener4 , -》 hello
// 应用,比如他有3个方法,但是我只要使用1个
2. 运算符重载
// 操作符重载
class Rmb{
def number
def isCase(o){
println o
if (o instanceof Rmb){
o.number == 99
}else
false
}
boolean equals(o) {
println 'equls 方法'
if (this.is(o)) return true
if (getClass() != o.class) return false
Rmb rmb = (Rmb) o
if (number != rmb.number) return false
return true
}
int hashCode() {
return (number != null ? number.hashCode() : 0)
}
def plus(o){
if (o instanceof Number){
new Rmb(number: number+o)
}else if (o instanceof Rmb){
new Rmb(number: number + o.number)
}else {
throw new MissingMethodException('plus',o.class,o)
}
}
@Override
public String toString() {
return "Rmb{" +
"number=" + number +
'}';
}
}
def rmb = new Rmb(number: 100)
println rmb + 100 //报错 Caught: groovy.lang.MissingMethodException: No signature of method: Rmb.plus() is applicable for argument types
// 缺少plus方法
// 如果我们加上了plus方法 toString方法,结果为--》Rmb{number=200}
println rmb + new Rmb(number: 1.0) // Rmb{number=101.0}
//println rmb + "" // Caught: groovy.lang.MissingMethodException: No signature of method: java.lang.String.plus() is applicable for argument types
def rmb2 = new Rmb(number: 99)
switch (rmb2){
case new Rmb(number: 100):
println "1"
break
case 100:
println "2"
break
}
// Rmb{number=99}
// 1
println('=====================================')
def str = ''
if (str){ // 之所以能作为条件判断,是因为他注入了asBoolean()方法,如果要改变让他
// 不止为null返回false还要加些其他的内容
// 我们可以在Rmb类中重写asBoolean方法
}
//还有 == 调用的是equals方法
rmb == '111' // equls 方法
下面是一些重载对应的方法