目录
groovy version 3.0.7,java 1.8
Groovydoc
使用/**@…*/定义文档
/**@
* Some class groovydoc for Foo
*/
class Foo {
/**@
* Some method groovydoc for bar
*/
void bar() {
}
}
关键字
插值(interpolation)
双引号可以值替换,单引号不可以
class Test {
static void main(String[] args) {
def name = "xiaoming"
println "name :${name}"
println 'name :${name}'
}
}
name :xiaoming
name :${name}
表达式计算
println "1 + 2 = ${1 + 2}"
// 1 + 2 = 3
反斜杠取消插值
assert '${1 + 2}' == "\${1 + 2}"
无参闭包
def sParameterLessClosure = "1 + 2 == ${-> 3}"
assert sParameterLessClosure == '1 + 2 == 3'
有参闭包
def sOneParamClosure = "1 + 2 == ${ w -> w << 3}"
assert sOneParamClosure == '1 + 2 == 3'
闭包延迟加载
def number = 1
def eagerGString = "value == ${number}"
def lazyGString = "value == ${ -> number }"
assert eagerGString == "value == 1"
assert lazyGString == "value == 1"
number = 2
assert eagerGString == "value == 1"
assert lazyGString == "value == 2"
String vs GString
String和GString的hashCode不同,GString不要用于Map的键值
def key = "a"
println "${key}".hashCode() // 134
println "a".hashCode() // 97
def map = ["${key}":"value"]
assert map["a"] == null
斜杠
斜杠可以用来定义正则、定义多行文本,也和双引号一样可以值替换
def value= "world"
def pattern = /.Abc*/
assert pattern == '.Abc*'
def lines = /111
hello ${value}
333
/
print lines
111
hello world
333
特例,下面代码编译不通过,双斜杠不等于空字符串
assert ‘’ == //
字符串总结
二进制
二进制以0b开头
byte xByte = 0b11
assert xByte == 3 as byte
八进制
八进制以0开头
int i = 011
assert i == 9 as short
十六进制
十六进制以0x开头
int xInt = 0x77
assert xInt == 119
数值类型后缀
可以通过后缀指定数值类型
assert 42i == new Integer('42')
List
def list = [1, 2, 3]
assert list instanceof List
assert list.size() == 3
def notTheSameTypeList = [1, "a", true]
notTheSameTypeList.each {
println it
}
1
a
true