声明:迁移自本人CSDN博客https://blog.csdn.net/u013365635

Java POJO在日志中常会用于打印,经常会将POJO的内容全部或部分打印出来,所以POJO类的toString()方法常要重写。

现在举一个例子

package com.test.lang;

public class SelfDefinedToString
{
String name; int age; String country; String occupation; @Override
public String toString() {
return "SelfDefinedToString{" +
"name='" + name + '\'' +
", age=" + age +
", country='" + country + '\'' +
", occupation='" + occupation + '\'' +
'}';
}
}

如果直接使用IDEA默认的自动代码生成器生成toString(),可能如上所示,其中使用了大量的字符串拼接,这样会产生很多的临时字符串对象,如果打印很多的话,对效率有不良影响。当然,IDEA已经给了我们一些备选项。如下图所示

IDEA自带的这些toString()生成模板,其实也透露出了一些语法规则。然后可以自己写一个模板出来。

/**
* {@inheritDoc}
*/
@Override
public java.lang.String toString()
{
final java.lang.StringBuilder sb = new java.lang.StringBuilder("$classname").append('[')
#set ($i = 0)
#foreach ($member in $members)
#if ($i == 0)
#if ($member.string)
.append("$member.name=")
#else
.append("$member.name=")
#end
#else
#if ($member.string)
.append(",$member.name=")
#else
.append(",$member.name=")
#end
#end
#if ($member.primitiveArray)
if ($member.name == null)
.append("null")
else {
.append('[');
for (int i = 0; i < $member.name .length; ++i)
.append(i == $member.name .length -1 ? "" : ", ").append($member.name [i])
.append(']');
}
#elseif ($member.objectArray)
.append($member.name == null ? "null" : java.util.Arrays.asList($member.name).toString())
#elseif ($member.string)
.append($member.accessor)
#else
.append($member.accessor)
#end
#set ($i = $i + 1)
#end
.append(']');
return sb.toString();
}

再看生成的代码

package com.test.lang;

public class SelfDefinedToString
{
String name; int age; String country; String occupation; /**
* {@inheritDoc}
*/
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("SelfDefinedToString").append('[')
.append("name=")
.append(name)
.append(",age=")
.append(age)
.append(",country=")
.append(country)
.append(",occupation=")
.append(occupation)
.append(']');
return sb.toString();
}
}

其实自动生成器的模板可以跟着例子调成自己想要的样子。主要是要学会举一反三。

操作实践,IDEA自定义toString()方法模板的更多相关文章

  1. IDEA自定义liveTemplates(方法模板、类模板)

    IDEA自定义liveTemplates(方法模板.类模板) 前言,搞这个模板有何意义? 降低大家写方法注释的成本,统一风格.有时候不是开发同学不爱写注释,而是没有合适的载体和空间. IDEA模板设置 ...

  2. Java基础(5):试用Array类对数据进行操作(Sort和toString方法)

    Arrays 类是 Java 中提供的一个工具类,在 java.util 包中.该类中包含了一些方法用来直接操作数组,比如可直接实现数组的排序.搜索等 1. 排序 语法:  Arrays.sort(数 ...

  3. 数组toString()方法,数组常用操作

    int[] arr ={1,2,3,4,5}; String arrString = Arrays.toString(arr); //输出[I@7150bd4d System.out.println( ...

  4. Spring Security验证流程剖析及自定义验证方法

    Spring Security的本质 Spring Security本质上是一连串的Filter, 然后又以一个独立的Filter的形式插入到Filter Chain里,其名为FilterChainP ...

  5. java泛型应用实例 - 自定义泛型类,方法

    近 短时间需要使用泛型,就研究了下,发现网上的问关于泛型的文章都是讲原理的, 很少有提到那里用泛型比较合适, 本文就泛型类和泛型方法的使用给出两 个典型应用场景. 例如一个toString的泛型方法, ...

  6. 自定义tt文本模板实现MySql指数据库中生成实体类

    自定义tt文本模板实现MySql指数据库中生成实体类 1.在项目中依次点击“添加”/“新建项”,选择“文本模板”,输入名称后点击添加. 2.在Base.tt中添加如下代码. <#@ templa ...

  7. 牛客网Java刷题知识点之字符流缓冲区、BufferedWriter、BufferedReader、BufferedReader-readLine方法原理、自定义MyBufferedReader-read方法、自定义MyBufferedReader-readLine方法

    不多说,直接上干货! 把提高效率的动作,封装成一个对象.即把缓冲区封装成一个对象. 就是在一个类里封装一个数组,能对流锁操作数据进行缓存. 什么是字符流缓冲区? 善于使用字符流缓冲区,减轻负担,提高下 ...

  8. JAVA基础——toString()方法

    toString()方法返回反映这个对象的字符串 因为toString方法是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”. 它通常只是为了方便输出,比如S ...

  9. equals与== 和toString方法

    /** * equals()方法的使用 * * 1.java.lang.Object类中的equals()方法的定义: * * public boolean equals(Object obj) { ...

随机推荐

  1. <老古董>线性支持向量机中的硬间隔(hard margin)和软间隔(soft margin)是什么

    _________________________________________________________________________________________________ Th ...

  2. maven详解之仓库

    在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件. Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依赖和插件的地方) 任何的 ...

  3. C#图片闪烁

    导致画面闪烁的关键原因分析:       一.绘制窗口由于大小位置状态改变进行重绘操作时      绘图窗口内容或大小每改变一次,都要调用Paint事件进行重绘操作,该操作会使画面重新刷新一次以维持窗 ...

  4. gdb 常用选项

    gdb 常用选项 help:查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h run:重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件),简写r st ...

  5. 1 - apicloud - str 字符串拼接技术

    <body> <label>Hello APP</label> <div id='sys-info'></div></body> ...

  6. Express ~ 获取表单 get 和 post 提交方式传送参数的对比

      一,获取 get 提交的参数   var id = req.query.id || ''   二,获取 post 提交的参数 var name = req.body.name || ''

  7. js运用sort对json 数组进行排序

    Array.sort()方法是用来对数组项进行排序的 ,默认情况下是进行升序排列.sort() 方法可以接受一个 方法为参数. sort()排序时每次比较两个数组项都回执行这个参数,并把两个比较的数组 ...

  8. Hibernate--(二)增删改查

    1.增删改查: public class Test { public static void main(String[] args) { SessionFactory sf = new Configu ...

  9. 201771010123汪慧和《面向对象程序设计Java》第十二周实验总结

    一.理论部分 1.在Java提供的GUI构建工具中可以分为组件和容器两类. 2.在Java中的组件有:按钮.标签.复选框.单选按钮.选择框.列表框.文本框.滚动条.画布.菜单. 3.在Java中的容器 ...

  10. redis(五)---- 简单消息队列

    消息队列一个消息的链表,是一个异步处理的数据处理引擎.不仅能够提高系统的负荷,还能够改善因网络阻塞导致的数据缺失.一般用于邮件发送.手机短信发送,数据表单提交.图片生成.视频转换.日志储存等. red ...