微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Groovy基础知识

Groovy中需要明白的知识点

  • Groovy允许省略每行代码后面的分号
  • 除非另行指定,Groovy中的所有修饰符都是public的
  • Groovy允许省略变量类型
  • Groovy中调用方法可以省略括号()

变量定义

通常有以下两种方式,一种是直接指定变量类型,另一种则不指定变量类型,直接使用def来定。

int intValue
println intValue //结果:0

def str = 'hello'
println str //结果:hello

动态类型绑定

def donamic = 1
println donamic.class //结果:class java.lang.Integer

donamic = 'hello'
println donamic.class //结果:class java.lang.String

donamic = false
println donamic.class //结果:class java.lang.Boolean

多重赋值(类似ES6的解构)

def list = [1,2,'c']

def a,b,c

(a,c) = list

println a //结果:1
println b //结果:2
println c //结果:c

for循环

//original
for(x=0; x<2; x++){
    println x //结果:0,1
}

//range
for(x in 1..3){
    println x //结果:1,2,3
}

//list
for(x in [1,3]){
    println x //结果:1,2,3
}

//map
def map = ['a':1,'b':2,'c':3]
for(x in map){
    println x.value //结果:1,2,3
}

//string
def hello = 'hello'
for(x in hello){
    println x //结果:h,e,l,o
}

注意,在for语句中的变量不用定义,当然你定义也行。

列表

在Groovy中定义集合很简单,你只要通过如下方式定义即可

def numbers = [1,3]

println numbers.size() //结果:3

你可以通过numbers[i]这种方式来访问列表中的每项,例如:

def numbers = [1,3]

println numbers[0] //结果:1

println numbers[-1] //结果:3,-1表示从列表后面向前访问的第一项

numbers[3] = 4 //添加一项
println numbers //结果:[1,3,4]

numbers << 5
println numbers //结果:[1,4,5]

通过上述的例子可以看出,你既可以通过numbers[i]这种方式来添加一个列表项,也可以通过 numbers<<5这种方式来添加列表项

映射

你可以通过以下方式来定义一个映射或者访问映射。

def colors = [red:'#ff0000',green:'#00ff00',blue:'#0000ff']

println colors.red //结果:#ff0000

println colors.'red' //结果:#ff0000

println colors."red" //结果:#ff0000

println colors['green'] //结果:#00ff00

println colors["green"] //结果:#00ff00

colors.yellow = '#ffff00' //增加键值对
println colors //结果:[red:#ff0000,green:#00ff00,blue:#0000ff,yellow:#ffff00]

通过上述的列子可以看出,既可以通过colors.red,colors[‘red’]这种方式来读取映射的值,也可以通过这种方式来增加键值对。

闭包

闭包其实就是一段可执行的代码集合,所以里面可以包括正常的赋值,循环等语句,定义一个简单的闭包如下:

def closure = {1}
println closure() // 结果:1
println closure.call() //结果:1

从这里可以看出闭包的返回值为闭包中代码的最后一行的值,如果最后一行没有返回值,那么闭包的返回值为null。

当然你可以给闭包传递一个参数

def implicitParamClosure = {it->
    println it
}

def explicitParamClosure = {para->
    println para
}

implicitParamClosure('Hello') //结果:Hello
explicitParamClosure.call('World') //结果:World

关于闭包,由于这个是Groovy的一个重要类型,并且在Gradle工具中大量使用,所以会在另外写一章进行详细说明。

class Song{

    def name
    def artist

    String toString() {
        "name = ${getName()},artist = ${artist}"
    }
}

def song = new Song()
song.name = 'Dangerous'
song.setArtist 'Jackson'
println song //结果:name = Dangerous,artist = Jackson

通过上面的代码示例,你可以看到类中的成员变量认会生成setXXX()和getXXX()函数

Groovy中认有两种构造函数一个是无参构造函数,另一个是map类型的构造函数

def song = new Song([name:'Dangerous',artist:'Jackson'])
//或者你可以写成 def song = new Song(name:'Dangerous',artist:'Jackson')
println song //结果:name = Dangerous,artist = Jackson

从这里看出,Groovy中的类定义比Java简单多了,不用定义构造函数和get,set函数,这样可以提高代码开发效率。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐