我想使用期望属性的值或指定的默认值.如何在groovy中实现这一目标?
我们来看看这个例子:
def printName(object) {
//if object has initialized property 'name' - print 'name', otherwise print ToString
if (object<some code here>name && object.name) {
print object.name
} else {
print object
}
}
Run Code Online (Sandbox Code Playgroud)
ata*_*lor 75
你可以用hasProperty.例:
if (object.hasProperty('name') && object.name) {
println object.name
} else {
println object
}
Run Code Online (Sandbox Code Playgroud)
如果您使用变量作为属性名称,则可以使用:
String propName = 'name'
if (object.hasProperty(propName) && object."$propName") {
...
}
Run Code Online (Sandbox Code Playgroud)
假设您object是一个Groovy类,您可以hasProperty在对象中使用,metaClass如下所示:
def printName( o ) {
if( o.metaClass.hasProperty( o, 'name' ) && o.name ) {
println "Printing Name : $o.name"
}
else {
println o
}
}
Run Code Online (Sandbox Code Playgroud)
那么,给出两个类:
class Named {
String name
int age
String toString() { "toString Named:$name/$age" }
}
class Unnamed {
int age
String toString() { "toString Unnamed:$age" }
}
Run Code Online (Sandbox Code Playgroud)
您可以创建它们的实例,并测试:
def a = new Named( name: 'tim', age: 21 )
def b = new Unnamed( age: 32 )
printName( a )
printName( b )
Run Code Online (Sandbox Code Playgroud)
哪个应该输出:
Printing Name : tim
toString Unnamed:32
Run Code Online (Sandbox Code Playgroud)