Groovy轻松入门
2012-08-08 12:15:19 来源:WEB开发网核心提示:(4)不需要构造函数 不再需要程序员声明任何构造函数,因为实际上只需要两个构造函数(1个不带参数的默认构造函数,Groovy轻松入门(4),1个只带一个map参数的构造函数--由于是map类型,通过这个参数你可以构造对象时任意初始化它的成员变量),从而使分支满足多个条件, 同java5一样, (5)不需要return
(4)不需要构造函数
不再需要程序员声明任何构造函数,因为实际上只需要两个构造函数(1个不带参数的默认构造函数,1个只带一个map参数的构造函数--由于是map类型,通过这个参数你可以构造对象时任意初始化它的成员变量)。
(5)不需要return
Groovy中,方法不需要return来返回值吗?这个似乎很难理解,看后面的代码吧,因此,Groovy风格的类是这样的
(6)不需要()
Groovy中方法调用 可以省略()(构造函数除外),也就是说下面两名是等同的:
def person1 = new Person()
person1.setName "john"
person1.setAge(25)
下面看一个完整类定义的例子:
class Person {
def name
def age
String toString() { //注意方法是String,因为我们需要覆盖的方法为String类型
"$name, $age"
}
如果你使用javabean风格来做同样的事,起码代码量要增加1倍以上。
我们可以使用默认构造方法实例化Person类:
def person1 = new Person()
person1.setName "john"
person1.setAge(25)
也可以用Groovy的风格做同样的事:
def person2=new Person(['name':'john','age':25])
println person2
这样需要注意我们覆盖了Object的toString方法,因为我们想通过println person1这样的方法简单地打印对象的属性值。
然而toString方法中并没有return一个String,但不用担心,Groovy默返回方法的最后一行的值。
13、?运算符
在java中,有时候为了避免出现空指针异常,我们通常需要这样的技巧:
if(rs!=null) {
rs.next()
......
}
在Groovy中,可以使用?操作符达到同样的目的:
rs?.next()
?在这里是一个条件运算符,如果?前面的对象非null,执行后面的方法,否则什么也不做。
14、可变参数
等同于java5中的变长参数。首先我们定义一个变长参数的方法sum:
int sum(int... var) {
def total=0
for(i in var) {
total+=1
}
return total
}
我们可以调用sum时使用任意个的参数(1个,2个,3个……):
println sum(1)
println sum(1,2)
println sum(1,2,3)
15、枚举
定义一个enum:
def today=Day.SATURDAY
switch(today) {
//Saturday or Sunday
case [Day.SATURDAY, Day.SUNDAY]:
println "Weekends are cool"
break;
case Day.MONDAY..Day.FRIDAY:
println "Boring work day"
break;
default:
println "Are you sure this is a valid day?"
}
注意,switch和case中可以使用任何对象,尤其是可以在case中使用List和范围,从而使分支满足多个条件。
同java5一样,Groovy支持带构造器。属性的方法的enum:
enum Planet {
MERCURY(3.303e+23,2.4397e6),
VENUS(4.869e+24,6.0518e6),
EARTH(5.976e+24,6.37814e6),
MARS(6.421e+23,3.3972e6),
JUPITER(1.9e+27,7.1492e7),
SATURN(5.688e+26,6.0268e7),
URANUS(8.686e+25,2.5559e7),
NEPTUNE(1.024e+26,2.4746e7)
double mass
double radius
Planet(double mass, double radius) {
this.mass=mass
this.radius=radius
}
void printMe(){
println :"${name()} has a mass of ${mass} and a radius of ${radius}"
}
}
Planet.EARTH.printMe()
16、Elvis运算符
不再需要程序员声明任何构造函数,因为实际上只需要两个构造函数(1个不带参数的默认构造函数,1个只带一个map参数的构造函数--由于是map类型,通过这个参数你可以构造对象时任意初始化它的成员变量)。
(5)不需要return
Groovy中,方法不需要return来返回值吗?这个似乎很难理解,看后面的代码吧,因此,Groovy风格的类是这样的
(6)不需要()
Groovy中方法调用 可以省略()(构造函数除外),也就是说下面两名是等同的:
def person1 = new Person()
person1.setName "john"
person1.setAge(25)
下面看一个完整类定义的例子:
class Person {
def name
def age
String toString() { //注意方法是String,因为我们需要覆盖的方法为String类型
"$name, $age"
}
如果你使用javabean风格来做同样的事,起码代码量要增加1倍以上。
我们可以使用默认构造方法实例化Person类:
def person1 = new Person()
person1.setName "john"
person1.setAge(25)
也可以用Groovy的风格做同样的事:
def person2=new Person(['name':'john','age':25])
println person2
这样需要注意我们覆盖了Object的toString方法,因为我们想通过println person1这样的方法简单地打印对象的属性值。
然而toString方法中并没有return一个String,但不用担心,Groovy默返回方法的最后一行的值。
13、?运算符
在java中,有时候为了避免出现空指针异常,我们通常需要这样的技巧:
if(rs!=null) {
rs.next()
......
}
在Groovy中,可以使用?操作符达到同样的目的:
rs?.next()
?在这里是一个条件运算符,如果?前面的对象非null,执行后面的方法,否则什么也不做。
14、可变参数
等同于java5中的变长参数。首先我们定义一个变长参数的方法sum:
int sum(int... var) {
def total=0
for(i in var) {
total+=1
}
return total
}
我们可以调用sum时使用任意个的参数(1个,2个,3个……):
println sum(1)
println sum(1,2)
println sum(1,2,3)
15、枚举
定义一个enum:
def today=Day.SATURDAY
switch(today) {
//Saturday or Sunday
case [Day.SATURDAY, Day.SUNDAY]:
println "Weekends are cool"
break;
case Day.MONDAY..Day.FRIDAY:
println "Boring work day"
break;
default:
println "Are you sure this is a valid day?"
}
注意,switch和case中可以使用任何对象,尤其是可以在case中使用List和范围,从而使分支满足多个条件。
同java5一样,Groovy支持带构造器。属性的方法的enum:
enum Planet {
MERCURY(3.303e+23,2.4397e6),
VENUS(4.869e+24,6.0518e6),
EARTH(5.976e+24,6.37814e6),
MARS(6.421e+23,3.3972e6),
JUPITER(1.9e+27,7.1492e7),
SATURN(5.688e+26,6.0268e7),
URANUS(8.686e+25,2.5559e7),
NEPTUNE(1.024e+26,2.4746e7)
double mass
double radius
Planet(double mass, double radius) {
this.mass=mass
this.radius=radius
}
void printMe(){
println :"${name()} has a mass of ${mass} and a radius of ${radius}"
}
}
Planet.EARTH.printMe()
16、Elvis运算符
更多精彩
赞助商链接