package com.groovy.test
/**
* 1、类自动生成了构造函数,构造函数接受一个名称-值对的映射,这些名称-值对与类的属性相对应,并且可以不用初始化对象的每个属性
* 2、Groovy 还生成了标准的 setter 和 getter 方法。总是会调用 setter 和 getter 方法 — 即使直接通过 . 语法访问属性也是如此。
* 3、在 Groovy 中可以省略 return 语句。Groovy 默认返回方法的最后一行
* 4、在调用方法时,Groovy 也允许在不带参数的方法上省略括号,不过不建议这么用,如果 Groovy 认为您要访问类的属性而不是方法,那么这样做可能会造成问题
* 5、只有一个参数或者参数是一个集合时,调用的时候也不需要括号 参考HelloWorld
* 6、在方法调用前面添加一个 ? 就相当于在调用前面放了一个条件,可以防止在 null 对象上调用方法。
*/
class Song {
def name
def artist
def genre
/**
* 在 Groovy 中可以省略 return 语句。Groovy 默认返回方法的最后一行
*/
String toString(){
"${name}, ${artist}, ${genre}"
}
/**
* 1、覆盖默认的getGenre()方法
* 2、在方法调用前面添加一个 ? 就相当于在调用前面放了一个条件,可以防止在 null 对象上调用方法。
* @return
*/
def getGenre(){
genre?.toUpperCase()
}
/**
* 用getXXX方法,即使没有定义XXX属性,在外面也可以用.XXX的姓氏调用该方法
* @return
*/
def getAutoProperty()
{
return "auto property";
}
}
package com.groovy.test
class SongExample {
static void main(args) {
song4()
}
/**
* 1、类自动生成了构造函数,构造函数接受一个名称-值对的映射,这些名称-值对与类的属性相对应
* 2、可以不用初始化对象的每个属性
* @return
*/
static song1()
{
def sng = new Song(name:"Le Freak",
artist:"Chic",
genre:"Disco")
def sng1 = new Song(name:"Le Freak",
artist:"Chic")
}
/**
* 属性赋值 3中
* @return
*/
static song2()
{
def sng = new Song()
sng.name = "Funkytown"
sng.setArtist "Lipps Inc."
sng.setGenre("Disco")
assert sng.getArtist() == "Lipps Inc."
}
/**
* 方法调用前面添加一个 ? 就相当于在调用前面放了一个条件,可以防止在 null 对象上调用方法。
* @return
*/
static song3()
{
def sng = new Song()
sng.getGenre()
sng.getArtist()?.toUpperCase()
}
/**
* 用getXXX方法,即使没有定义XXX属性,在外面也可以用.XXX的姓氏调用该方法
* @return
*/
static song4()
{
def sng = new Song()
println sng.autoProperty
}
}