Groovy中那些神奇註解之ToString

繼續上一篇:Groovy中那些神奇註解之Memoizedhtml

這篇就講講@groovy.transform.ToString這個註解,這注解太熟悉了,熟悉到讓人一看就知道是幹嘛的,不就是把Bean轉在String麼?java

沒錯,它就是把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,一下知足我所有需求啊app

若是要想看看註解作了啥,把代碼複製到GroovyConsole中,而後點擊菜單Script->Inspect AST,就能看到最終生成的Groovy代碼是怎樣的了ui

如下是展開的Book類:this

@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還有很多的選項,對我我的而言,其實默認的就足夠了,就偷懶只寫一下介紹了debug

ToString選項說明
選項名 默認值  說明
includeNames false 顯示的時候是否帶上屬性的名稱,好比name=Groovy In Action
excludes 哪些屬性不顯示
includes 要顯示哪些屬性
includeSuper false 是否顯示父類的ToString效果
includeSuperProperties false 是否顯示父類的屬性
includeFields false 是否顯示類字段(好比private字段, public的會自動轉成屬性)
ignoreNulls false 是否忽略NULL值
includePackage false 類名是否包含包名
cache false 是否把ToString的值緩存起來
     

 

 

好了,就這麼多了,休息,休息一下code

相關文章
相關標籤/搜索