声明:迁移自本人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. cf221 D. Little Elephant and Array

    题解真的是太神奇了2333 用离线和树状数组(为什么感觉和HH的项链是的,什么鬼),比较巧妙的是他把整个数列分成几段.用一个vector来记录每个数出现的位置.一共就是data[a[i]][sz]-- ...

  2. python 4个人中有一人做了好事,一直有三个人说了真话,根据下面的对话判断是谁做的好事

    题目:4个人中有一人做了好事,一直有三个人说了真话,根据下面的对话判断是谁做的好事. A:不是我 B:是C C:是D D:C胡说 for inum in ['A','B','C','D']: prin ...

  3. Python 35个内置函数,你都ok吗?

    Python一共有60多个内置函数,今天先梳理其中35 个 1 abs() 绝对值或复数的模 . In [1]: abs(-6)Out[1]: 6 2 all() 接受一个迭代器,如果迭代器的所有元素 ...

  4. enlipse 快捷键

    ctrl+shift+o  去掉多余的引用类

  5. js(JavaScript)使用${pageContext.request.contextPath}报错

    前几天写程序在js文件中用到了${pageContext.request.contextPath}然后一直报错,没有办法post到服务器,原来js把这个当成字符串了,一直以为他是jquery的函数! ...

  6. Docker 镜像(image)

    版权所有,未经许可,禁止转载 章节 Docker 介绍 Docker 和虚拟机的区别 Docker 安装 Docker Hub Docker 镜像(image) Docker 容器(container ...

  7. 【剑指Offer】面试题05.替换空格

    题目 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输入:s = "We are happy." 输出:"We%20are ...

  8. ROS常见问题(一) 安装ROS时sudo rosdep init指令报错 最全解决方法

    安装ROS时sudo rosdep init指令报错: ERROR: cannot download default sources list from: https://raw.githubuser ...

  9. hadoop yarn 实战错误汇总

    1.hadoop yarn 运行wordcount时执行完成,但是返回错误 错误信息如下: // :: INFO mapreduce.Job: Job job_1441395011668_0001 f ...

  10. 关于torch.norm函数的笔记

    先看一下它的参数: norm(p='fro', dim=None, keepdim=False, dtype=None) p: the order of norm. 一般来说指定 $p = 1, 2$ ...