继续上一篇:Groovy中那些神奇注解之Memoized

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

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

@groovy.transform.ToString
class Book{def namedef 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的值缓存起来
     

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

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

Groovy中那些神奇注解之ToString相关推荐

  1. Spring Security 中的权限注解很神奇吗?

    最近有个小伙伴在微信群里问 Spring Security 权限注解的问题: 很多时候事情就是这么巧,松哥最近在做的 tienchin 也是基于注解来处理权限问题的,所以既然大家有这个问题,咱们就一块 ...

  2. 难以想象SpringBoot中的条件注解底层居然是这样实现的

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | https://urlify.cn/bm2qqi Spr ...

  3. 面试:SpringBoot中的条件注解底层是如何实现的?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | https://urlify.cn/bm2qqi Spr ...

  4. 面试:Spring Boot 中的条件注解底层是如何实现的?

    SpringBoot内部提供了特有的注解:条件注解(Conditional Annotation).比如@ConditionalOnBean.@ConditionalOnClass.@Conditio ...

  5. Mybatis中的@SelectKey注解

    一.创建Maven项目 在pom.xml中,添加mybatis依赖,mysql-jdbc依赖,把编译版本改为1.8 你问,为啥mybatis不会自动依赖mysql-jdbc,需要手动写明?答:因为my ...

  6. Groovy中的闭包

    groovy中的一个核心语法:closurs,也叫闭包.闭包在groovy中是一个处于代码上下文中的开放的,匿名代码块.它可以访问到其外部的变量或方法. 1. 句法 1.1 定义一个闭包 { [clo ...

  7. Spring 中的各种注解,光会用可不够哦!

    来源:https://digdeep.cnblogs.com/digdeep/p/4525567.html 1. Java中的注解 2. 使用 元注解 来自定义注解 和 处理自定义注解 3. spri ...

  8. 【Groovy】Groovy 动态语言特性 ( Groovy 中函数实参自动类型推断 | 函数动态参数注意事项 )

    文章目录 前言 一.Groovy 中函数实参自动类型推断 二.函数动态参数注意事项 三.完整代码示例 前言 Groovy 是动态语言 , Java 是静态语言 ; 本篇博客讨论 Groovy 中 , ...

  9. java中spring的注解_spring中的各种注解解析

    Spring中的注解大概可以分为两大类: 1)spring的bean容器相关的注解,或者说bean工厂相关的注解: 2)springmvc相关的注解. spring的bean容器相关的注解,先后有:@ ...

  10. TypeScript笔记(4)—— TypeScript中的类型注解

    TypeScript(4):类型注解 [导读]JavaScript是若类型语言,而TypeScript里的类型注解是一种轻量级的为函数或变量添加约束的方式,为我们提供了静态类型分析能力,这样我们就可以 ...

最新文章

  1. asp.net 1.1/ 2.0 中快速实现单点登陆
  2. centos7每天定时删除备份mysql文件
  3. vue踩坑记-在项目中安装依赖模块npm install报错
  4. LD_LIBRARY_PATH should not contain the current directory
  5. 从ACL2021看对比学习在NLP中的应用
  6. pythonxml库_Python XML操作
  7. 使用python制作趣味小游戏—投骰子
  8. java 银行卡号_java银行卡号判断银行
  9. 五大理由!建议你选择中国电信 CTWing 物联网平台?
  10. 实验五 集线器和交换机的区别
  11. 注册Apple ID -- 常识
  12. 404网站服务器错误怎么解决,网站404错误怎么解决?[终极Xenu死链工具]
  13. Vue表单输入绑定(v-model)
  14. 【将门创投】这12张图生动地告诉你,深度学习中的卷积网络是怎么一回事?...
  15. Unity使用UnityWebRequest实现本地日志上传到web服务器
  16. 《淘宝店铺营销推广一册通》一2.2 选择店铺行业
  17. 追剧人的福利来了,这几款APP让你痛快追剧
  18. MySQL 删除数据库
  19. 如何获取(GET)一杯咖啡——星巴克REST案例分析
  20. play 框架目录结构

热门文章

  1. 计算机视觉实战(九)信用卡数字识别项目(附完整代码)
  2. UED团队建设系列之前端开发工程师:职业技能与素质
  3. 快捷添加请求头的方法
  4. C#多线程的用法2-线程的生命周期
  5. jenkins 全局工具配置
  6. 如何使用WordPress搭建网站
  7. 软件需求分析教程阅读笔记二
  8. IPv4正则表达式匹配
  9. Android开发中的全屏背景显示方案
  10. win10软件安装出现错误代码2503/2502