Groovy05_Groovy方法调用与运算符重载
Posted 李樟清
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Groovy05_Groovy方法调用与运算符重载相关的知识,希望对你有一定的参考价值。
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方法,结果为--》Rmbnumber=200
println rmb + new Rmb(number: 1.0) // Rmbnumber=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
// Rmbnumber=99
// 1
println('=====================================')
def str = ''
if (str) // 之所以能作为条件判断,是因为他注入了asBoolean()方法,如果要改变让他
// 不止为null返回false还要加些其他的内容
// 我们可以在Rmb类中重写asBoolean方法
//还有 == 调用的是equals方法
rmb == '111' // equls 方法
下面是一些重载对应的方法
以上是关于Groovy05_Groovy方法调用与运算符重载的主要内容,如果未能解决你的问题,请参考以下文章
Groovy集合遍历 ( 操作符重载 | 集合中的 “ + “ 操作符重载 | 集合中的 “ - “ 操作符重载 | 代码示例 )
Groovy集合遍历 ( 操作符重载 | 集合中的 “ + “ 操作符重载 | 集合中的 “ - “ 操作符重载 | 代码示例 )