import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.LinkedHashMap;

public class ToStringUtils {

public static final String GET = "get";

/**
* 返回JavaBena的toString方法值
*
* @param t
* @return String
*/
public static <T> String getToString(T t) {
String result = null;
Field[] fields = t.getClass().getDeclaredFields(); // 获取实体类的所有属性,返回Field数组
LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>();
for (Field field : fields) {
field.setAccessible(true);
String name = field.getName(); // 获取属性的名字
Object value = getAttributeValue(t, name);// 获取属性值
map.put(name, value != null ? value : null);
name = null;
value = null;
}
result = map.toString();
fields = null;
map.clear();
map = null;
return result;
}

/**
* 返回JavaBena的toString方法值(只有属性的情况下)
*
* @param t
* @return String
*/
public static <T> String getToString1(T t) {
String result = null;
Field[] fields = t.getClass().getDeclaredFields(); // 获取实体类的所有属性,返回Field数组
LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>();
for (Field field : fields) {
try {
field.setAccessible(true);
map.put(field.getName(), field.get(t));
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
result = map.toString();
fields = null;
map.clear();
map = null;
return result;
}

/**
* 通过反射,用属性名称获得属性值
*
* @param t
* @param attributeName
* @return Object
*/
private static <T> Object getAttributeValue(T t, String attributeName) {
Object result = null;
Method method = null;
try {
StringBuffer methodName = new StringBuffer(GET);
methodName.append(attributeName.substring(0, 1).toUpperCase());
methodName.append(attributeName.substring(1));
method = t.getClass().getMethod(methodName.toString());
methodName = null;
result = method.invoke(t);
method = null;
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}

public class BaseBean {
@Override
public String toString() {
// TODO Auto-generated method stub
return ToStringUtils.getToString(this);
}
}

public class TestBean extends BaseBean {

private int id;
private String name;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

public class Test {

public static void main(String[] args) {
TestBean testBean = new TestBean();
System.out.println("默认值:" + testBean.toString());
testBean.setId(10010);
testBean.setName("李四");
System.out.println("赋值之后:" + testBean.toString());
}
}

JavaBean的toString方法工具类的更多相关文章

  1. Json与javaBean之间的转换工具类

    /**  * Json与javaBean之间的转换工具类  *  * {@code 现使用json-lib组件实现  *    需要  *     json-lib-2.4-jdk15.jar  * ...

  2. Java—API/Obiect类的equals toString方法/String类/StringBuffer类/正则表达式

    API  Java 的API(API: Application(应用) Programming(程序) Interface(接口)) 就是JDK中提供给我们使用的类,这些类将底层的代码实现封装了起来 ...

  3. Java 字符串格式化和工具类使用

    前言 我们在做项目时候经常需要对字符串进行处理,判断,操作,所以我就总结了一下java 字符串一些常用操作,和推荐比较好用我在自用的工具类,毕竟有轮子我们自己就不用重复去写了,提供开发效率,剩下的时间 ...

  4. 如何在SpringBoot当中上传多个图片或者上传单个图片 工具类

    如何在SpringBoot当中上传多个图片[上传多个图片 ] 附赠工具类 1.SpringBoot 上传图片工具类 public class SpringUploadUtil { /*** * 上传图 ...

  5. Java开发常用Util工具类-StringUtil、CastUtil、CollectionUtil、ArrayUtil、PropsUtil

    字符串工具类 StringUtil.java package com.***.util; /** * StringUtil * @description: 字符串工具类 **/ public clas ...

  6. [18/11/30] toString()方法 和 equals() 方法

    一. toString() 方法 Object类中定义有public String toString()方法,其返回值是 String 类型  默认: return getClass().getNam ...

  7. AQS的子类在各个同步工具类中的使用情况

    AQS AQS(AbstractQueuedSynchronizer)是 java.util.concurrent的基础.J.U.C中宣传的封装良好的同步工具类Semaphore.CountDownL ...

  8. java工具类–自动将数据库表生成javabean

    最近和数据库的表打交道挺多的,因为暂时做的是接口活. 在这过程中发现要把表转换成对应的javabean类型,字段少的表还行,如果不小心碰到几十个字段的他妈的写起来就有点麻烦了,万一碰到几百个的呢,那不 ...

  9. 把xml转成javabean的工具类

    import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import javax.x ...

随机推荐

  1. 高性能网络编程(一)----accept建立连接

    编写服务器时,许多程序员习惯于使用高层次的组件.中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发的效率,追求更快的完成项目功能点.希望应用代码完全不关 ...

  2. syntax error near unexpected token `then'问题的解决

    #!/bin/bash #if program test echo 'a:' read a if  [  "$a"  =  "English"  ];then ...

  3. java写入excel文件poi

    java写入excel文件 java写入excel文件poi,支持xlsx与xls,没有文件自动创建 package com.utils; import java.io.File; import ja ...

  4. icePDF去水印方法

    原文:http://www.cnblogs.com/pcheng/p/5711660.html 1.首先下载到icepdf的架包. 2.用解压缩软件,对该jar文件进行解压,得到名为icepdf-co ...

  5. PostgreSQL笔记

    本文针对目前最新版9.5.1,若非说明,文中所说文档即指官方文档.本人刚接触PostgreSQL不久,文中不免错漏,请大家指正:随着了解深入,本文[可能]会不定期更新补足. JSON PostgreS ...

  6. 装tomcat和nginx心得

    开机启动tomcat 1:在/etc/rc.d/init.d目录下生成一个文件tomcat8080 2:在文件里添加如下内 #!/bin/bash #2345 linux运行级别 #10开机启动优先级 ...

  7. Drools规则

    1.实现业务逻辑和业务规则的分离,实现业务规则的集中管理 2.可以动态的改变业务规则,从而快速响应需求变更 3.业务分析人员也可以参与编辑.维护系统的业务规则 fact:一个普通的JavaBean插入 ...

  8. long l=88;这个表达式是正确的,因为long比int类型大,会发生自动转换

    long l=88;这个表达式是正确的,因为long比int类型大,会发生自动转换

  9. JAVA-系统-【2】-创建自增长的用户表

    [2]创建数据库表  用户表 自增 1.用户表结构  数据excel 表1 2.创建表 Create table A_USER( id number primary key, username ) n ...

  10. 面试iOS遇到这种笔试《操作评估》

    一.开发团队需求: 开发一款软件需要前端后台和推广的人.1,首先要明确设计这个APP的理念2,合理的列出APP的需求3,找到后台人员让他们搭好后台数据4,前端的人负责展示到界面上5,推广人员负责让更多 ...