`
lesorb
  • 浏览: 122519 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java反射之ObjectAnalyzer

    博客分类:
  • java
阅读更多
JAVA2中关于反射的应用主要是用来分析类结构,其中的Field,Method,Constructor类分别描述类的字段,方法和构造器。它们又分别读有相应的getName,getType,getModifiers等方法来返回其类信息。
类ObjectAnalyzerTest:


package cn.lesorb;

import java.text.NumberFormat;
import java.util.ArrayList;

public class ObjectAnalyzerTest {
	public static void main(String[] args) 
	{
		ObjectAnalyzer objAnalyzer = new ObjectAnalyzer();
		Object obj = NumberFormat.getCurrencyInstance();
		
		System.out.println(objAnalyzer.toString(obj));
		
		ArrayList<Object> al = objAnalyzer.visited;
		for(int i=0;i<al.size();i++) {
			System.out.println(al.get(i));
		}
		
	}
}

类ObjectAnalyzer:
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;

class ObjectAnalyzer{

	@SuppressWarnings("unchecked")
	public String toString(Object obj){
	/*
	*
	*	Converts an object to a string representation that lists all fields
	*
	*/
	if(obj==null)   return "null"; 
	if(visited.contains(obj))  return "..."; 

	visited.add(obj);
	Class c1=obj.getClass();
	
	if(c1==String.class){
		return (String)obj;
	}
	
	if(c1.isArray()){
		
		String r=c1.getComponentType()+"[]{";
	  
		for(int i=0;i<Array.getLength(obj);i++){
	     if(i>0){
	    	 r+=",";
	     }
	     
	     Object val=Array.get(obj,i);
	     if(c1.getComponentType().isPrimitive()){
	    	 r+=val;
	     } else{
	    	 r+=toString(val);
	     }
	    }
		return r+"}";
	   }
	
	   String r=c1.getName();
	   
	   do{
		   
	    r+="[";
	    Field[] fields=c1.getDeclaredFields();
	    AccessibleObject.setAccessible(fields,true);
	    for(Field f:fields){
	    	if(!Modifier.isStatic(f.getModifiers())){
	    		if(!r.endsWith("[")){
	    			r+=",";
	    		}
	    	r+=f.getName()+"=";
	    	
	      try {
	    	  
	       Class t=f.getType();
	       Object val=f.get(obj);
	       
	       if(t.isPrimitive()){
	    	   r+=val;
	       } else {
	    	   r+=toString(val);
	       }
	      } catch(Exception e) {
	    	  e.printStackTrace();
	      }
	     }
	    }
	    
	    r+="]";
	    c1=c1.getSuperclass();
	    
	   }
	   
	   while(c1!=null);
	   return r;
	   
	}
	
	ArrayList<Object> visited=new ArrayList<Object>();
	
}

打印输出:
java.text.DecimalFormat@774c1
0
[C@156ee8e
HALF_EVEN
HALF_EVEN


-¥

'-'¤
java.text.DecimalFormatSymbols@1073a

?
CNY
E
zh_CN
zh
CN
CNY
分享到:
评论
3 楼 chaojijing_02 2011-04-10  
-¥

'-'¤
这些是怎么出来的。
2 楼 Technoboy 2011-04-10  
稍微解释一下就好了...
1 楼 peterwei 2011-04-10  
lesorb 写道
JAVA2中关于反射的应用主要是用来分析类结构,其中的Field,Method,Constructor类分别描述类的字段,方法和构造器。它们又分别读有相应的getName,getType,getModifiers等方法来返回其类信息。


package cn.lesorb;

import java.text.NumberFormat;
import java.util.ArrayList;

public class ObjectAnalyzerTest {
	public static void main(String[] args) 
	{
		ObjectAnalyzer objAnalyzer = new ObjectAnalyzer();
		Object obj = NumberFormat.getCurrencyInstance();
		
		System.out.println(objAnalyzer.toString(obj));
		
		ArrayList<Object> al = objAnalyzer.visited;
		for(int i=0;i<al.size();i++) {
			System.out.println(al.get(i));
		}
		
	}
}


import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;

class ObjectAnalyzer{

	@SuppressWarnings("unchecked")
	public String toString(Object obj){
	/*
	*
	*	Converts an object to a string representation that lists all fields
	*
	*/
	if(obj==null)   return "null"; 
	if(visited.contains(obj))  return "..."; 

	visited.add(obj);
	Class c1=obj.getClass();
	
	if(c1==String.class){
		return (String)obj;
	}
	
	if(c1.isArray()){
		
		String r=c1.getComponentType()+"[]{";
	  
		for(int i=0;i<Array.getLength(obj);i++){
	     if(i>0){
	    	 r+=",";
	     }
	     
	     Object val=Array.get(obj,i);
	     if(c1.getComponentType().isPrimitive()){
	    	 r+=val;
	     } else{
	    	 r+=toString(val);
	     }
	    }
		return r+"}";
	   }
	
	   String r=c1.getName();
	   
	   do{
		   
	    r+="[";
	    Field[] fields=c1.getDeclaredFields();
	    AccessibleObject.setAccessible(fields,true);
	    for(Field f:fields){
	    	if(!Modifier.isStatic(f.getModifiers())){
	    		if(!r.endsWith("[")){
	    			r+=",";
	    		}
	    	r+=f.getName()+"=";
	    	
	      try {
	    	  
	       Class t=f.getType();
	       Object val=f.get(obj);
	       
	       if(t.isPrimitive()){
	    	   r+=val;
	       } else {
	    	   r+=toString(val);
	       }
	      } catch(Exception e) {
	    	  e.printStackTrace();
	      }
	     }
	    }
	    
	    r+="]";
	    c1=c1.getSuperclass();
	    
	   }
	   
	   while(c1!=null);
	   return r;
	   
	}
	
	ArrayList<Object> visited=new ArrayList<Object>();
	
}



你这也太搞了,什么说明都没有。场景和应用。

相关推荐

    java反射机制.zip

    java反射机制java反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制...

    Java反射性能测试分析

    ### Java反射性能测试分析 #### 引言 Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时动态地访问、检测和修改类、接口、字段和方法等对象。然而,反射操作通常会引入额外的开销,这在性能敏感的...

    JAVA反射机制的入门代码

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...

    java 反射得到某个方法

    在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段以及方法等对象。通过反射,我们可以在不知道具体类名或方法名的情况下,动态地调用对象的方法或访问其属性。在...

    Java反射机制总结

    ### Java反射机制总结 #### 反射的概念与起源 反射的概念最早由Smith于1982年提出,指的是程序能够访问、检测并修改其自身状态或行为的能力。这一概念的提出迅速引起了计算机科学领域的广泛关注,并在之后的研究中...

    反射实例-JAVA反射机制

    ### 反射实例—JAVA反射机制 #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言...

    java 反射机制例子

    Java反射的核心功能之一就是能够检测类的信息。下面通过一个具体的示例来展示如何使用Java反射来获取类的详细信息: ```java import java.lang.reflect.*; public class DumpMethods { public static void main...

    java反射源代码

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有高度的灵活性,尤其在处理框架、插件系统以及元数据驱动...

    java反射.pdf

    ### Java反射机制详解 #### 一、什么是Java反射? Java反射是Java编程语言的一个特性,它允许运行时检查和操作程序结构(类、字段、方法等)。反射的主要用途包括但不限于:动态实例化对象、访问私有成员、调用...

    Java反射机制 Java反射机制

    ### Java反射机制详解 #### 一、Java反射机制概述 Java反射机制是Java语言的一个重要特性,它允许程序在运行时获取类的信息并操作对象。Java反射机制的主要作用包括:获取类的所有属性和方法、构造动态实例、调用...

    北大青鸟java反射机制

    总之,Java反射机制是Java程序员必备的技能之一,它提供了对程序运行时类型信息的访问和操作,极大地扩展了Java代码的灵活性和可扩展性。通过深入学习和实践,我们可以更好地理解和利用这一强大的工具。

    Java反射机制Demo

    ### Java反射机制详解 #### 一、什么是Java反射机制? Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的...

    java反射获取所有属性,获取所有get方法,包括子类父类

    Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射主要用于在运行时分析类和对象,包括访问私有成员、调用私有方法、创建动态代理等。...

    Java 反射创建get set方法及反射方法的调用

    ### Java反射创建get set方法及反射方法的调用 #### 概述 在Java编程语言中,反射(Reflection)是一种强大的技术,它允许程序在运行时检查类、接口、字段和方法的信息,并能够动态地创建对象和调用方法。本文将...

    java反射JAVA REFLECT (java 反射)

    JAVA REFLECT (java 反射) 取得类的继承结构 - 类所在的包; |- public Package getPackage() - 类的声明方式; |-取得全类名:public String getName() |-只取类名: public String getSimpleName() - 类所继承...

    Java反射案例

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类集中在java.lang.reflect包下,包括Class、Constructor、Method和Field...

    Java 反射-动态代理

    Java反射和动态代理是Java编程中的重要特性,它们在实现高度灵活和动态的代码执行上发挥着关键作用。本文将深入探讨这两个概念,以及如何在实际开发中利用它们。 首先,我们来理解Java反射(Reflection)。Java反射...

    Reflection_in_Java.zip_in_java 反射_java 反射机制_java反射_反射机制

    Java反射机制是Java编程语言中一个强大的特性,它允许运行时的程序动态地获取类的信息并操作类的对象。在Java中,反射主要涉及到`java.lang.Class`类、`java.lang.reflect`包下的类如`Constructor`、`Method`和`...

    java 反射ppt 和 code 示例

    Java反射是Java编程语言中的一个重要特性,它允许程序在运行时检查和操作类、接口、字段和方法等对象。在“java 反射ppt 和 code 示例”中,我们可以深入理解这个强大的工具及其在实际开发中的应用。 首先,PPT部分...

Global site tag (gtag.js) - Google Analytics