易截截图软件、单文件、免安装、纯绿色、仅160KB

Java Reflect 反射机制 学习笔记 [万能toString方法]

利用Java Reflect机制编写万能toString()方法:
 
 
package com.accp.test.filed;

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;

public class ObjectAnalyzer {

private List<Object> visited = new ArrayList<Object>();

public String toString(Object obj) {

if (obj == null)
return null; // 如果obj为空..返回null
if (visited.contains(obj))
return "..."; // 如果visited中已经包含obj,返回...

visited.add(obj);

Class c1 = obj.getClass(); // 得到运行时对象

if (c1 == String.class)
return (String) obj; // 如果c1是String类型,直接转换

if (c1.isArray()) { // 如果是数组类型
String r = c1.getComponentType() + "[]{"; // 得到该数组组件类型的Class

for (int i = 0; i < Array.getLength(obj); i++) {
if (i > 0)
r += ",";
Object var = Array.get(obj, i); // 取得obj[i]元素的值
if (c1.getComponentType().isPrimitive()) // 如果为基本类型
r += var;
else
r += toString(var); // 递归调用
}
return r + "}";
}

String r = c1.getName(); // 得到obj名称

// 检查本类域和所有超类域
do {
r += "[";
Field[] fields = c1.getDeclaredFields(); // 得到本类和超类所有域
AccessibleObject.setAccessible(fields, true); // 将所有域设置为可访问的.

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

try {
Class type = field.getType(); // 得到字段类型
Object var =


相关文档:

Java的内存泄漏

Java的内存泄漏
===========================================================
作者: shwenwen(http://shwenwen.itpub.net)
发表于: 2009.06.04 10:38
分类: java开发技术
出处: http://shwenwen.itpub.net/post/34911/485404
---------------------------------------------------------------
不管用java C++ ......

JAVA学习之路

Java程序员到架构师的推荐阅读书籍收藏
一、Java编程入门类
对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是“囫囵吞枣不求甚解”,先对Java熟悉起来再说。用很短的时间快速过一遍Java语法,连懵带猜多写写代码,要“知其然&r ......

java代码连接到oracle数据库

package com.deng.oracle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestOracle {
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriv ......

Java文件对象创建目录和文件

   在java中貌似不能同时创建目录和文件,需要分布创建,即不能在创建目录的时候,同时创建该目录下的文件,如果要创建的话,需要分两步,下边是创建的代码Java代码 try {              String path = "D:/test ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号