从JAVA核心技术卷轴Ⅰ:基础知识中整理得到。

import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
/**
 * 一种公认提供toString的方法
 */
public class TestToString {
	private List<Object> visited = new ArrayList<Object>();

	public String toString(Object obj) {
		if (obj == null)
			return "null";
		if (visited.contains(obj))
			return "...";
		visited.add(obj);
		Class<?> c = obj.getClass();
		if (c == String.class)
			return (String) obj;
		if (c.isArray()) {
			String r = c.getComponentType() + "[]{";

			for (int i = 0; i < Array.getLength(obj); i++) {
				if (i > 0)
					r += ",";
				Object value = Array.get(obj, i);
				if (c.getComponentType().isPrimitive())
					r += value;
				else
					r += toString(value);
			}
			return r + "}";
		}

		String r = c.getName();

		do {
			r += "[";

			Field[] fileds = c.getDeclaredFields();
			AccessibleObject.setAccessible(fileds, true);

			for (Field field : fileds) {
				if (!Modifier.isStatic(field.getModifiers())) {
					if (!r.endsWith("["))
						r += ",";
					r += field.getName() + "=";

					try {
						Class<?> t = field.getType();
						Object val = field.get(obj);
						if (t.isPrimitive())
							r += val;
						else
							r += toString(val);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}

			r += "]";
			c = c.getSuperclass();
		} while (c != null);

		return r;
	}

	public static void main(String[] args) {
		List<Integer> values = new ArrayList<Integer>();
		for (int i = 0; i < 6; i++) {
			values.add(i * i);
		}
		System.err.println(new TestToString().toString(values));
	}
}

最新文章

  1. a标签 不触发 目标链接
  2. Fix the iOS code signing issue when using Jenkins
  3. JS操作iframe
  4. Hibernate占位符?和:及JPA
  5. [daily][CentOS][yum] 删除包的同时一同清理掉安装时一起装进来的依赖包
  6. Div 自适应屏幕大小
  7. Codevs No.1287 矩阵乘法
  8. 【项目】git的部署使用
  9. Error opening zip file or JAR manifest missing : D:\play-1.2.5/framework/play-1.2.5.jar
  10. Fedora 20 Gnome安装及配置记录
  11. regular expression tutorial
  12. C#邮件发送开发经本人测试通过
  13. Python的迭代器与生成器
  14. 201521123050 《Java程序设计》第14周学习总结
  15. redis+thinkphp5的注册、登陆、关注基础例子
  16. Python分页组件
  17. 《使用python进行数据分析》
  18. Silverlight 预定义颜色速查表
  19. phpmyadmin配置文件权限错误,不应任何用户都能修改
  20. HUD 2639 Bone Collector II

热门文章

  1. filter和listener的生命周期
  2. 去掉Bootstrap fileinput缩略图上面的上传删除按钮?
  3. hibernate实体对象的三种状态:自由状态,持久状态,游离状态.
  4. 解决问题redis问题:ERR Client sent AUTH, but no password is set
  5. java连接sqlserver2008
  6. JavaScript 字符串(String)对象
  7. Vue 踩坑记
  8. Android开发之手把手教你写ButterKnife框架(二)
  9. Android Multimedia框架总结(十六)Camera2框架之openCamera及session过程
  10. Android简易实战教程--第三十一话《自定义土司》