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

java 反射资料 列子

阅读更多
import java.lang.reflect.Field;
import java.lang.reflect.Method;


public class ReflectTester {
	
	
	public Object copy(Object object) throws Exception{
		
		/**
		 * 获得实体对象的运行时类
		 */
		Class<?> classType = object.getClass();
		//System.out.println("the run class is:"+classType.getName());
		
		/**
		 * 获得实体的构造方法
		 */
		Object objectCopy = classType.getConstructor(new Class[] {}).newInstance(new Object[] {});
		
		/**
		 * getDeclaredFields()获得类的所有属性
		 * getFields()获得public类型的类的属性
		 */		
		Field fields[] = classType.getDeclaredFields();
		
		for(int i=0;i<fields.length;i++){
			
			/**
			 * 取出第i个类的属性
			 * 例如:private java.lang.String Custom.name
			 */
			Field field=fields[i];
			
			System.out.println("field:"+field);
			
			String fieldName = field.getName();
			
			/**
			 * 获得属性的名字
			 * 例如:name
			 */
			System.out.println("fieldName:"+fieldName);
			
			/**
			 * 将属性名字的第一个字母大写例如name的n变成N
			 */
			String firstletter = fieldName.substring(0, 1).toUpperCase();
			
			/**
			 * 得到getName
			 */
			String getMethodName = "get"+firstletter+fieldName.substring(1);
			
			/**
			 * 得到setName
			 */
			String setMethodName = "set"+firstletter+fieldName.substring(1);
			
			/**
			 * 得到getName()方法
			 */
			Method getMethod = classType.getMethod(getMethodName, new Class[]{});
			
			Method setMethod = classType.getMethod(setMethodName, new Class[]{field.getType()});
			
			/**
			 * 调用method的invoke()方法即执行原对象的getXXX()方法
			 */
			Object value = getMethod.invoke(object, new Object[]{});
			System.out.println(fieldName+" :"+value);
			
			/**
			 * 调用method的invoke()方法即执行原对象的setXXX()方法
			 */
			setMethod.invoke(object,new Object[]{value});
			
			
		}
		
		return objectCopy;
		
	}
	
	
	public static void main(String args[]) throws Exception{
		
		
		Custom custom = new Custom("tom",22);
		custom.setId(1);
		
		Custom customcopy = (Custom)new ReflectTester().copy(custom);
		
		System.out.println("copy information:"+customcopy.getId() + " " + customcopy.getName() + " " + custom.getAge());
	}
	
}	

    /**
     * the class
     * @author Administrator
     *
     */
	class Custom{
	
	   private long id;
	   
	   private String name;
	   
	   private int age;
	   
	   public Custom(){
		   
	   }
	   
	   /**
	    *  Constructor
	    * @param name
	    * @param age
	    */
	   public Custom(String name,int age){
		   
		   this.name=name;
		   
		   this.age=age;
		   
	   }

	   
	   /**
	    * the get and set method of fields
	    * @return
	    */
		public long getId() {
			return id;
		}
	
		public void setId(long id) {
			this.id = id;
		}
	
		public String getName() {
			return name;
		}
	
		public void setName(String name) {
			this.name = name;
		}
	
		public int getAge() {
			return age;
		}
	
		public void setAge(int age) {
			this.age = age;
		}
		
	}

 

 

import java.lang.reflect.Method;

/**
 * 联系invoke方法的使用
 * @author Administrator
 *
 */
public class InvokeTester {
	
	 public int add(int param1,int param2){
		 
		 return param1+param2;
	 }
	 
	 public String echo(String msg){
		 
		 return "echo:"+msg;
		 
	 }
	 
	 
	 
	 public static void main(String [] args) throws Exception{
		 
		 Class<?> classType = InvokeTester.class;
		 
		 /**
		  * 下面为调用类的默认构造方法如果有多个构造方法,则用下面的方法实现
		  * classType.getConstructor(new Class[]{}).newInstance(new Object[]{});
		  */
		 
		 Object invokeTester = classType.newInstance();
		 
		 /**
		  * 获得get()方法
		  */
		 Method addMethod = classType.getMethod("add", new Class[]{int.class,int.class});
		 /**
		  * 执行get()方法
		  */
		 Object result = addMethod.invoke(invokeTester, new Object[]{new Integer(100),new Integer(200)});
		 
		 System.out.println("the result is:" + (Integer)result);
		 
		 Method echoMethod = classType.getMethod("echo", new Class[]{String.class});
		 
		 Object echores = echoMethod.invoke(invokeTester, new Object[]{new String("hello world")});
		 
		 System.out.println("echo result is:" + (String) echores);
		 
	 }
	 

}

 

分享到:
评论

相关推荐

    java反射机制列子

    java反射机制列子

    JAVA反射列子

    标题:JAVA反射列子 描述:本段代码展示了JAVA反射机制的基本使用,通过实例化Class对象,动态地访问和操作类的信息与功能。 知识点详细解析: ### 1. 反射简介 反射是Java的一项强大功能,允许在运行时检查和...

    java 200个经典列子 源代码下载

    这个"java 200个经典列子"的源代码下载包含了丰富的示例,可以帮助初学者和有经验的开发者深入理解Java语言的核心概念以及实际应用。 在Java的学习过程中,实践是极其重要的,这些例子提供了宝贵的实践机会。下面...

    Java反射封装库joor.zip

    jOOR 在java原生的反射基础上进行了简单的封装,使得反射使用方便不少! 举个简单的列子,供大家参考。 java 原生反射写法: try { Method m1 = department.getClass().getMethod("getEmployees"); Employee ...

    Java语言程序设计案例教程(课本源代码)

    10. **反射与注解**:Java反射机制用于动态加载类、创建对象、调用方法,注解则提供了元数据功能,方便代码管理和工具支持。 通过这些源代码,学习者不仅可以深入理解Java语言的特性和用法,还能培养良好的编程习惯...

    Java技术大合集 真的是技术点的列子 很实用的

    反射机制、泛型、枚举、注解等也是高级主题,它们在实际开发中有着广泛的应用。 Java还特别重视API的使用,如JDBC(Java Database Connectivity)用于数据库操作,Swing和JavaFX用于图形用户界面(GUI)开发,...

    用easypoi 制表 格式 列子

    2. **写入Excel数据**:同样,通过注解和反射机制,Easypoi可以将Java对象的数据写入到Excel中。开发者只需要创建一个对象列表,调用相应的方法,就能自动生成Excel文件。 3. **模板处理**:Easypoi支持使用模板来...

Global site tag (gtag.js) - Google Analytics