• Groovy中那些神奇注解之ToString


    继续上一篇: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选项说明
    选项名 默认值  说明
    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的值缓存起来
         

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

  • 相关阅读:
    香洲区学区查询
    审批流程标识
    小技巧
    Python字符串操作
    Delphi删除动态数组的指定元素
    dephi 多种排序 算法
    [转载]模拟退火,遗传算法,禁忌搜索,神经网络
    Date类学习总结(Calendar Date 字符串 相互转换 格式化) 转
    Java静态嵌套类
    java中的匿名内部类总结
  • 原文地址:https://www.cnblogs.com/varlxj/p/5181788.html
Copyright © 2020-2023  润新知