Groovy Tip 8 GroovyBean
发布时间:2020-12-14 17:00:09 所属栏目:大数据 来源:网络整理
导读:?????????????????????????????? Groovy Tip 8 GroovyBean ? ? 做这个主题的时候,我曾想了好些天,要不要做这个主题。因为Groovy Bean对于使用Groovy语言的开发者来说再熟悉不过,说不定每天都在用它。犹豫了好多天,才决定把它写下来。因为我也使用Groovy
??????????????????????????????
Groovy Tip 8 GroovyBean
?
?
做这个主题的时候,我曾想了好些天,要不要做这个主题。因为Groovy Bean对于使用Groovy语言的开发者来说再熟悉不过,说不定每天都在用它。犹豫了好多天,才决定把它写下来。因为我也使用Groovy Bean很久了,但很多概念也是慢慢搞清楚的,在写代码的时候走了一些弯路。
肯定很多使用了Groovy语言的开发者写过类似于这样的代码:
class
Person
{
??? ??? String name
??? ??? int age
??? ??? String addr
???
}
?
也肯定这样使用过:
Person person =
new
Person()
??????
?????? person.name =
'Tom'
??? ……
?
很多初次接触
Groovy
语言的人都以为
Groovy Bean
的属性是公开的,可以直接访问。这其实是一个误解。上面的
Person
类其实相当于如下的
Java
类:
public
class
Person {
???
???
private
String
name
;
???
???
private
int
age
;
???
???
private
String
addr
;
?
???
public
String getAddr() {
??????
return
addr
;
??? }
?
???
public
void
setAddr(String addr) {
??????
this
.
addr
= addr;
??? }
?
???
public
int
getAge() {
??????
return
age
;
??? }
?
???
public
void
setAge(
int
age) {
??????
this
.
age
= age;
??? }
?
???
public
String getName() {
??????
return
name
;
??? }
?
???
public
void
setName(String name) {
??????
this
.
name
= name;
??? }
?
}
?
因此,上面的
person.name =
'Tom'语句其实相当于Java语言中的:
person.setName(“Tom”);
?
而println person.name语句相当于Java语言中的:
person.getName();
?
同样,Groovy语言还有一个一个规则,
如果你声明一个属性为“
private
”、“
public
”或“
protected
”,那么你只是声明了一个属性,这意味着你要自己写属性的“
set
”和“
get
”方法。
Groovy语言对Java语言的Javabean的更外一个简化就是你不需要给Groovy Bean编写一个构造器,就可以使用构造器。如:
?????? Person person =
new
Person(name:
'Tom'
)
??????
???
println
person.name
?
当然,你也可以一口气把
Person
类的属性全部赋值:
?????? Person person =
new
Person(name:
'Tom'
,age:
22
,addr:
'Shenzhen'
)
?
???
println
"${person.name} lived in ${person.addr}"
?
打印结果为:
Tom lived in Shenzhen
?
当你把一个属性声明成
final
的时候,就不能再给该属性赋值了。如:
class
Person {
???
??? String name
???
final
int
age = 22
??? String addr
?
}
?
它相当于
Java
的:
public
class
Person {
???
???
private
String
name
;
???
???
private
final
int
age
= 22;
???
???
private
String
addr
;
?
???
public
String getAddr() {
??????
return
addr
;
??? }
?
???
public
void
setAddr(String addr) {
??????
this
.
addr
= addr;
??? }
?
???
public
int
getAge() {
??????
return
age
;
??? }
?
???
public
String getName() {
??????
return
name
;
??? }
?
???
public
void
setName(String name) {
??????
this
.
name
= name;
??? }
?
}
?
注意,只有
getAge
()方法,没有
set
方法。
如果你对上面的
Groovy Bean
进行如下访问:
?????? Person person =
new
Person(name:
'Tom'
,addr:
'Shenzhen'
)
?
???
println
"${person.name} lived in ${person.addr}"
?
就会抛出如下的Exception:
Exception in thread "main"
groovy.lang.ReadOnlyPropertyException
: Cannot set readonly property: age for class: Person
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |