您的位置:首页 > 其它

Groovy中那些神奇注解之ToString

2016-02-04 15:56 253 查看
继续上一篇:Groovy中那些神奇注解之Memoized

这篇就讲讲@groovy.transform.ToString这个注解,这注解太熟悉了,熟悉到让人一看就知道是干吗的,不就是把Bean转在String么?

没错,它就是把Bean转成String,只不过比Java默认的类名加上HashCode可是好太多了,来个例子(Groovy自带了dump()和inspect()方法,也是查看对象的,写在一起做比较了)

@groovy.transform.ToString
class Book{
def name
def price
}

def book = new Book(name:"Groovy In Action", price: 68)
println book
println book.dump()
println book.inspect()

/*
结果如下:
Book(Groovy In Action, 68)
<Book@41067f0a name=Groovy In Action price=68>
Book(Groovy In Action, 68)

*/


  

怎么样,感觉不错吧,想到以前为了看个Bean的值 ,要么debug,要么写System.out.println,现在有了ToString,一下满足我全部需求啊

如果要想看看注解做了啥,把代码复制到GroovyConsole中,然后点击菜单Script->Inspect AST,就能看到最终生成的Groovy代码是怎样的了

以下是展开的Book类:

@groovy.transform.ToString
public class Book implements groovy.lang.GroovyObject extends java.lang.Object {

private java.lang.Object name
private java.lang.Object price
private static org.codehaus.groovy.reflection.ClassInfo $staticClassInfo
public static transient boolean __$stMC
private transient groovy.lang.MetaClass metaClass

public Book() {
metaClass = /*BytecodeExpression*/
}

public java.lang.String toString() {
java.lang.Object _result = new java.lang.StringBuilder()
java.lang.Object $toStringFirst = true
_result.append('Book(')
if ( $toStringFirst ) {
$toStringFirst = false
} else {
_result.append(', ')
}
if (this.getName().is(this)) {
_result.append('(this)')
} else {
_result.append(org.codehaus.groovy.runtime.InvokerHelper.toString(this.getName()))
}
if ( $toStringFirst ) {
$toStringFirst = false
} else {
_result.append(', ')
}
if (this.getPrice().is(this)) {
_result.append('(this)')
} else {
_result.append(org.codehaus.groovy.runtime.InvokerHelper.toString(this.getPrice()))
}
_result.append(')')
return _result.toString()
}

protected groovy.lang.MetaClass $getStaticMetaClass() {
}

public groovy.lang.MetaClass getMetaClass() {
}

public void setMetaClass(groovy.lang.MetaClass mc) {
}

public java.lang.Object invokeMethod(java.lang.String method, java.lang.Object arguments) {
}

public java.lang.Object getProperty(java.lang.String property) {
}

public void setProperty(java.lang.String property, java.lang.Object value) {
}

public java.lang.Object getName() {
}

public void setName(java.lang.Object value) {
}

public java.lang.Object getPrice() {
}

public void setPrice(java.lang.Object value) {
}

public java.lang.String super$1$toString() {
}

}


  

ToString还有不少的选项,对我个人而言,其实默认的就足够了,就偷懒只写一下介绍了

ToString选项说明

选项名默认值 说明
includeNamesfalse显示的时候是否带上属性的名称,比如name=Groovy In Action
excludes哪些属性不显示
includes要显示哪些属性
includeSuperfalse是否显示父类的ToString效果
includeSuperPropertiesfalse是否显示父类的属性
includeFieldsfalse是否显示类字段(比如private字段, public的会自动转成属性)
ignoreNullsfalse是否忽略NULL值
includePackagefalse类名是否包含包名
cachefalse是否把ToString的值缓存起来
好了,就这么多了,休息,休息一下

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: