备份一个有用的工具类.TypeUtil
它的typeToString(String scope, Object obj)方法,采用java的reflect机制,可以打印出任何对象的内容.
这对调试程序非常有用.
使用方法:
如果你有一个对象(比如testClassObject),想打印它的内容,可用如下方法:
System.out.println(TypeUtil.typeToString("yourClassObjectName",testClassObject));
这个方法,对调试那些对容器依赖的ejb程序很有用,特此备份.
以下为TypeUtil源程序:
java 代码
-
-
-
-
-
-
-
-
-
-
-
- import java.util.*;
- import java.lang.reflect.*;
-
-
- public class TypeUtil {
-
-
-
-
-
-
-
-
-
-
-
- private static String complexTypeToString(String scope, Object parentObject,List visitedObjs) {
-
- StringBuffer buffer = new StringBuffer("");
-
- try {
-
-
-
-
-
- Class cl = parentObject.getClass();
- while ( cl != null ) {
-
- processFields(cl.getDeclaredFields(),
- scope,
- parentObject,
- buffer,
- visitedObjs );
-
- cl = cl.getSuperclass();
- }
- } catch (IllegalAccessException iae) {
- buffer.append(iae.toString());
- }
-
- return (buffer.toString());
- }
-
-
-
-
-
-
-
-
-
-
- private static void processFields( Field[] fields,
- String scope,
- Object parentObject,
- StringBuffer buffer,
- List visitedObjs ) throws IllegalAccessException {
-
- for (int i = 0; i < fields.length; i++) {
-
-
-
-
- if (fields[i].getName().equals("__discriminator")
- || fields[i].getName().equals("__uninitialized")) {
- continue;
- }
-
-
-
-
-
- fields[i].setAccessible(true);
-
- if (Modifier.isStatic(fields[i].getModifiers())) {
-
-
-
-
-
- } else {
- buffer.append(
- typeToString(scope + "." + fields[i].getName(), fields[i].get(parentObject), visitedObjs));
- }
- }
-
- }
-
-
-
-
-
-
- public static boolean isCollectionType(Object obj) {
-
- return( obj.getClass().isArray()||
- (obj instanceof Collection)||
- (obj instanceof Hashtable)||
- (obj instanceof HashMap)||
- (obj instanceof HashSet)||
- (obj instanceof List)||
- (obj instanceof AbstractMap ) );
- }
-
-
-
-
-
-
- public static boolean isComplexType(Object obj) {
-
- if ( obj instanceof Boolean ||
- obj instanceof Short ||
- obj instanceof Byte ||
- obj instanceof Integer ||
- obj instanceof Long ||
- obj instanceof Float ||
- obj instanceof Character ||
- obj instanceof Double ||
- obj instanceof String ) {
-
- return false;
- }
- else {
-
- Class objectClass = obj.getClass();
-
- if (objectClass == boolean.class
- || objectClass == Boolean.class
- || objectClass == short.class
- || objectClass == Short.class
- || objectClass == byte.class
- || objectClass == Byte.class
- || objectClass == int.class
- || objectClass == Integer.class
- || objectClass == long.class
- || objectClass == Long.class
- || objectClass == float.class
- || objectClass == Float.class
- || objectClass == char.class
- || objectClass == Character.class
- || objectClass == double.class
- || objectClass == Double.class
- || objectClass == String.class ) {
-
- return false;
-
- }
-
- else {
- return true;
- }
- }
- }
-
-
-
-
-
-
-
-
-
- private static String collectionTypeToString(String scope, Object obj, List visitedObjs) {
-
- StringBuffer buffer = new StringBuffer("");
-
- if (obj.getClass().isArray()) {
- if (Array.getLength(obj) > 0) {
-
- for (int j = 0; j < Array.getLength(obj); j++) {
-
- Object x = Array.get(obj, j);
-
- buffer.append(typeToString(scope + "[" + j + "]", x, visitedObjs));
- }
-
- } else {
- buffer.append(scope + "[]: empty\n");
- }
- } else {
- boolean isCollection = (obj instanceof Collection);
- boolean isHashTable = (obj instanceof Hashtable);
- boolean isHashMap = (obj instanceof HashMap);
- boolean isHashSet = (obj instanceof HashSet);
- boolean isAbstractMap = (obj instanceof AbstractMap);
- boolean isMap = isAbstractMap || isHashMap || isHashTable;
-
- if (isMap) {
- Set keySet = ((Map) obj).keySet();
- Iterator iterator = keySet.iterator();
- int size = keySet.size();
-
- if (size > 0) {
-
- for (int j = 0; iterator.hasNext(); j++) {
-
- Object key = iterator.next();
- Object x = ((Map) obj).get(key);
-
- buffer.append(typeToString(scope + "[\"" + key + "\"]", x, visitedObjs));
- }
- } else {
- buffer.append(scope + "[]: empty\n");
- }
- } else
- if (
- isCollection || isHashSet
- ) {
-
- Iterator iterator = null;
- int size = 0;
-
- if (obj != null) {
-
- if (isCollection) {
- iterator = ((Collection) obj).iterator();
- size = ((Collection) obj).size();
- } else
- if (isHashTable) {
- iterator = ((Hashtable) obj).values().iterator();
- size = ((Hashtable) obj).size();
- } else
- if (isHashSet) {
- iterator = ((HashSet) obj).iterator();
- size = ((HashSet) obj).size();
- } else
- if (isHashMap) {
- iterator = ((HashMap) obj).values().iterator();
- size = ((HashMap) obj).size();
- }
-
- if (size > 0) {
-
- for (int j = 0; iterator.hasNext(); j++) {
-
- Object x = iterator.next();
- buffer.append(typeToString(scope + "[" + j + "]", x, visitedObjs));
- }
- } else {
- buffer.append(scope + "[]: empty\n");
- }
- } else {
-
-
- buffer.append(scope + "[]: null\n");
- }
- }
- }
-
- return (buffer.toString());
-
- }
-
-
-
-
-
-
-
- private static String typeToString(String scope, Object obj, List visitedObjs) {
-
- if (obj == null) {
- return (scope + ": null\n");
- }
- else if (isCollectionType( obj ) ) {
- return collectionTypeToString( scope, obj, visitedObjs );
- }
- else if (isComplexType( obj ) ) {
- if( ! visitedObjs.contains(obj)) {
- visitedObjs.add(obj);
- return complexTypeToString( scope, obj, visitedObjs ) ;
- }
- else {
- return(scope + ": \n" );
- }
- }
- else {
- return ( scope + ": " + obj.toString() + "\n");
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
- public static String typeToString(String scope, Object obj) {
-
- if (obj == null) {
- return (scope + ": null\n");
- }
- else if (isCollectionType( obj ) ) {
- return collectionTypeToString( scope, obj, new ArrayList());
- }
- else if (isComplexType( obj ) ) {
- return complexTypeToString( scope, obj, new ArrayList() ) ;
- }
- else {
- return ( scope + ": " + obj.toString() + "\n");
- }
- }
- }
分享到:
- 2007-03-06 11:59
- 浏览 2155
- 评论(1)
- 论坛回复 / 浏览 (1 / 2422)
- 查看更多
相关推荐
Java中的反射(Reflect)是Java语言的一个重要特性,它允许运行时访问类、接口、字段和方法的信息,甚至能够在运行时动态地创建对象和调用方法。反射在很多场景下都发挥着关键作用,比如在框架开发、插件系统、序列化...
`ToString`方法是Java中一个常用的功能,用于将对象的属性以字符串的形式展示出来,这对于调试和日志记录非常有用。在给定的`标题`中提到的"最好的java对象ToString处理方案,ToString基类"指的是一个优化的`...
Java开发工具包(JDK)是Java编程语言的核心组件,提供了编写、编译、调试和运行Java应用程序所需的所有工具。在JDK 1.8版本中,开发者对`sun.reflect`和`unsafe`这两个包进行了扩展,这为高级功能和性能优化提供了...
反射在许多场景下都很有用,如框架设计、元编程、插件系统、序列化以及在未知类型的情况下操作对象。 描述中的"play-base.zip,播放BasePlay框架帮助程序"提到了一个名为BasePlay的框架。Play Framework是一个开源的...
学习Java JDK源码能够帮助开发者更好地调试问题,优化代码,并且对软件工程有更深入的理解。 1. **Java类库**:Java JDK源码中的类库提供了大量用于输入/输出、网络通信、集合框架、多线程、异常处理等的基础功能。...
对于99%的内容参考,这意味着项目可能借鉴了大量已有的资源和最佳实践,是一个很好的学习和进阶的平台。在深入研究每个子模块的同时,结合相关文档和参考资料,将有助于更全面地理解和掌握Java编程的精髓。
2. **JDK组件**:包括Java编译器(javac)、Java虚拟机(JVM)、Java运行时环境(JRE)、Java调试器(jdb)、Java应用启动器(java)、类文件验证器(javap)等工具,它们是Java开发和运行的基础。 3. **类库详解**...
在Java 1.7中,`sun`包下有许多关键的类,比如`java.lang.reflect包`中的`sun.misc.Unsafe`,这是一个强大的工具类,允许开发者访问和修改内存,执行低级别的操作,但同时也可能导致不安全的代码。 总的来说,这个...
Java中的`java.time`包和`SimpleDateFormat`就是很好的例子,可以方便地处理日期和时间的格式化输出。 3. **网络工具类**:在网络编程中,这类工具类用于处理HTTP请求、URL解析、网络连接等任务。例如,`...
Java 2 SDK,也被称为Java Development Kit (JDK),是Java编程语言的核心组成部分,它包含了开发者需要的一切工具和资源来创建、编译、调试和运行Java应用程序。这个PDF文档很可能是对Java SDK中的各种类库进行深入...
Java反射机制是Java编程语言中的一个重要特性,它赋予了程序在运行时检查和操作类、接口、字段和方法的能力。...了解和掌握反射机制,可以帮助开发者更好地利用Java的动态特性,解决复杂编程问题。
`Object`类提供了基本的方法,如`equals()`、`hashCode()`和`toString()`,这些方法在比较对象、实现哈希表和打印对象信息时经常用到。深入理解`Object`类可以帮助我们更好地实现自定义类。 2. `String`类:`String...
3. **动态代理(Dynamic Proxies)**:Java 6通过`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`接口提供了动态代理功能,可以方便地实现接口的动态代理对象,常用于AOP(面向切面编程)。...
源码分析是提升Java开发者技能的重要途径,能够帮助我们理解Java内部的工作原理,优化代码,以及更好地调试和解决问题。 在这个主题“Java rt.jar 源码分析”中,我们将探讨以下几个关键知识点: 1. **Java标准库*...
- 访问私有成员:通过反射可以访问私有字段和方法,这在测试、调试或实现元编程时很有用。 - 动态方法调用:反射可以用于调用未知的方法,只需在运行时知道方法名和参数类型即可。 2. **反射的性能问题**: - ...
Java提供了一个内置的接口`java.lang.reflect.InvocationHandler`和一个静态工厂方法`java.lang.reflect.Proxy.newProxyInstance()`来实现动态代理。代理类在运行时生成,因此它的行为可以根据需要在运行时改变,...
- 在Java中,字符串是以Unicode格式存储的,因此可以很好地支持多语言环境。 **3. Eclipse简便设置** - Eclipse是一个流行的Java开发工具,可以通过简单的设置来提高开发效率。例如,可以设置自动导入包、代码格式...
Java Development Kit (JDK) 是Java编程语言的核心组件,它为开发者提供了编译、调试和运行Java应用程序所需的所有工具。标题“jdk1.6 mac 64 zip”指的是适用于Mac OS X操作系统的64位版本的JDK 1.6的zip格式安装包...
Java Development Kit (JDK) 是Java编程语言的核心组件,它包含了一个完整的Java运行环境和一组开发工具,使得程序员能够编写、编译、调试和运行Java应用程序。JDK 6是Oracle公司发布的一个重要版本,发布于2006年,...
Java开发工具包(JDK)是Java编程语言的核心组件,它包含了编译器、调试器、文档生成工具以及Java运行环境(JRE)。在给定的标题“jdk6x86安装后jre6”中,我们可以理解为用户已经成功安装了32位版本的JDK 1.6,这个...