博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Groovy中那些神奇注解之ToString
阅读量:5103 次
发布时间:2019-06-13

本文共 3053 字,大约阅读时间需要 10 分钟。

继续上一篇:

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

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

@groovy.transform.ToStringclass Book{    def name    def price}def book = new Book(name:"Groovy In Action", price: 68)println bookprintln book.dump()println book.inspect()/*结果如下:Book(Groovy In Action, 68)
Book(Groovy In Action, 68)*/

  

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

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

以下是展开的Book类:

@groovy.transform.ToStringpublic 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选项说明
选项名 默认值  说明
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的值缓存起来
     

 

 

好了,就这么多了,休息,休息一下

转载于:https://www.cnblogs.com/varlxj/p/5181788.html

你可能感兴趣的文章
"远程桌面连接--“发生身份验证错误。要求的函数不受支持
查看>>
【BZOJ1565】 植物大战僵尸
查看>>
视频:"我是设计师"高清完整版Plus拍摄花絮
查看>>
VALSE2019总结(4)-主题报告
查看>>
浅谈 unix, linux, ios, android 区别和联系
查看>>
51nod 1428 活动安排问题 (贪心+优先队列)
查看>>
中国烧鹅系列:利用烧鹅自动执行SD卡上的自定义程序(含视频)
查看>>
Solaris11修改主机名
查看>>
latex for wordpress(一)
查看>>
如何在maven工程中加载oracle驱动
查看>>
Flask 系列之 SQLAlchemy
查看>>
iframe跨域与session失效问题
查看>>
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
Hash和Bloom Filter
查看>>
SQL Server获取月度列表
查看>>
python常用函数
查看>>
python 描点画圆
查看>>
FastDFS使用
查看>>