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. 2.2 ARM处理器工作模式

    ARM Architecture Reference Manual Arm 指令框架手册 种工作模式 Processor mode Mode number Description User usr 0 ...

  2. django--模板(七)

    1.模板加载 一个项目可以有多个应用,每个应用下都可以有模板,思考模板的查找顺序?

  3. leetcode-【简单题】Happy Number

    题目: Write an algorithm to determine if a number is "happy". A happy number is a number def ...

  4. 机器学习笔记——autoEncoder使用

    前向传播与反向传播 十.参考文献 [1]http://blog.csdn.net/changyuanchn/article/details/15681853

  5. jQuery.fn.extend() 与 jQuery.extend()

    jQuery.fn如何扩展. jQuery插件 $.fn(object)与$.extend(object) jQuery提供了两个方法帮助开发插件 $.extend(object);扩展jQuery类 ...

  6. Iphone连接win10电脑正常, itunes无法识别解决

    1.之前试过重装itunes, apple的两个服务也都已经启动. 2.但是设备管理器不显示移动设备或者usb的apple mobile device driver 3.解决:打开C:\Program ...

  7. sql join用法学习

    为了在两个或更多的表中获取结果,我们常常会用到join inner join(又叫join) out join包括left join,right join和full join(也就是left+righ ...

  8. 用EasyWebSvr搭建Axure本地访问地址-转载加完善

    1.下载之后解压到任意一个位置,可以是桌面(反正很小不占空间),如图2:: 图2 解压之后文件目录 2.将生成的原型放在EasyWebSvr根目录下的demo之中,如图3所示: 图3  原型文件放置目 ...

  9. Using Redis to store php session

    Using Redis to store php session 默认情况下,php将会将session信息存储在文件系统上,在单机情况下没有问题,但是当系统负载增大,或者在对系统可用性要求很高的场景 ...

  10. 发现IE7的一个问题,不能用索引取字符串中的单个字符

    如下javascript: var testValue="hello,world"; alert(testValue[]); 在IE7上运行该代码,竟然提示值为"unde ...