原文地址:Groovy Goodness: Easy toString Creation for Our Classes
从Groovy 1.8开始我们可以使用@ToString注解来创建toString()方法,只需要在class上添加一个注解,这个类就可以通过toString方法输出它的properties。
我们可以直接在注解中配置toString方法的输出内容,例如是否输出属性名称(includeNames=true),是否输出私有属性(includeFields=true),还可以通过excludes 属性来设置不输出的的属性列表。
最后,我们还可以把父类的属性也一起输出(includeSuper=true)。
最简单的使用方式
<!-- lang: java -->
import groovy.transform.ToString
@ToString
class Person {
String name
List likes
private boolean active = false
}
def person = new Person(name: 'mrhaki', likes: ['Groovy', 'Java'])
assert person.toString() == 'Person(mrhaki, [Groovy, Java])'
连属性名字一起输出
<!-- lang: java -->
import groovy.transform.ToString
@ToString(includeNames=true)
class Person {
String name
List likes
private boolean active = false
}
def person = new Person(name: 'mrhaki', likes: ['Groovy', 'Java'])
assert person.toString() == 'Person(name:mrhaki, likes:[Groovy, Java])'
输出私有属性
<!-- lang: java -->
// includeFields to not only output properties, but also field values.
import groovy.transform.ToString
@ToString(includeNames=true, includeFields=true)
class Person {
String name
List likes
private boolean active = false
}
def person = new Person(name: 'mrhaki', likes: ['Groovy', 'Java'])
assert person.toString() == 'Person(name:mrhaki, likes:[Groovy, Java], active:false)'
使用includeSuper来输出父类的属性
<!-- lang: java -->
// Use includeSuper to include properties from super class in output.
import groovy.transform.ToString
@ToString(includeNames=true)
class Person {
String name
List likes
private boolean active = false
}
@ToString(includeSuper=true, includeNames=true)
class Student extends Person {
List courses
}
def student = new Student(name: 'mrhaki', likes: ['Groovy', 'Java'], courses: ['IT', 'Business'])
assert student.toString() == 'Student(courses:[IT, Business], super:Person(name:mrhaki, likes:[Groovy, Java]))'
控制不输出某些属性
<!-- lang: java -->
// excludes active field and likes property from output
import groovy.transform.ToString
@ToString(includeNames=true, includeFields=true, excludes='active,likes')
class Person {
String name
List likes
private boolean active = false
}
def person = new Person(name: 'mrhaki', likes: ['Groovy', 'Java'])
assert person.toString() == 'Person(name:mrhaki)'