`
lesorb
  • 浏览: 120885 次
  • 性别: 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反射 java反射 java反射java反射

    java反射 java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射

    java反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJB

    java反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJB

    java反射机制.zip

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

    JAVA 反射机制应用

    JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用

    java反射,获取所有属性、方法以及List集合类

    java反射,获取所有属性、方法以及List集合类

    通过Java反射机制获取JavaBean对象

    1.通过Java反射机制获取JavaBean对象。 2.通过JavaBean全路径字符串获取JavaBean对象。 3.获取JavaBean注解信息

    Java反射经典实例

    Java反射经典实例 Java反射经典实例 Java反射经典实例 Java反射经典实例

    Java反射机制总结

    这是一本关于Java反射机制论文集合的书。其中包含基本的理论及各种实例。... 关键字有:Java Java反射机制 Java反射 Java反射理论 Java反射实例 Java反射例子 反射原理 反射 网络论文 集合 汇总 总结 Class。

    反射实例-JAVA反射机制.doc

    反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc...

    JAVA反射机制的入门代码

    代码为JAVA反射的一个DEMO,适合初学者临摹学习,还附有properties的创建方法,比较基础。

    java反射之Constructor

    本文档时关于Java的反射的一个组件Constructor的描述和讲解

    java反射........

    java反射java反射java反射java反射java反射

    Java反射机制 Java反射机制

    Java反射机制Java反射机制Java反射机制Java反射机制Java反射机制Java反射机制Java反射机制Java反射机制

    Java反射机制经典案例

    Java 反射机制、Java 的类反射机制、Java 反射机制的学习、Java 反射Reflection--运行时生成实例 java反射机制的手册文档

    java反射JAVA REFLECT (java 反射)

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

    java 反射中操作数组

    java 反射中操作数组 java 反射中操作数组 java 反射中操作数组

    java反射的demo代码

    java 反射demo

    java之反射优化(缓存思路)源码

    java之反射优化(缓存思路)源码 编程中,抽象是一个重要思想。一个无状态(业务less)的抽象化工具方法,往往可以起到减少代码量的作用,使得程序员能更加focus更加重要的业务逻辑中去

    JAVA反射机制详解视频

    (通过反射获取无参构造方法并使用) (通过反射获取带参构造方法并使用) (通过反射获取私有构造方法并使用) (通过反射获取成员变量并使用) (通过反射获取无参无返回值成员方法并使用) (通过反射获取带参带返回值成员...

    java 反射ppt 和 code 示例

    中科院培训的java反射的PPT 和 java 反射的示例代码 供大家分享 , 谢谢 !

Global site tag (gtag.js) - Google Analytics