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反射机制的基本使用,通过实例化Class对象,动态地访问和操作类的信息与功能。 知识点详细解析: ### 1. 反射简介 反射是Java的一项强大功能,允许在运行时检查和...
这个"java 200个经典列子"的源代码下载包含了丰富的示例,可以帮助初学者和有经验的开发者深入理解Java语言的核心概念以及实际应用。 在Java的学习过程中,实践是极其重要的,这些例子提供了宝贵的实践机会。下面...
jOOR 在java原生的反射基础上进行了简单的封装,使得反射使用方便不少! 举个简单的列子,供大家参考。 java 原生反射写法: try { Method m1 = department.getClass().getMethod("getEmployees"); Employee ...
10. **反射与注解**:Java反射机制用于动态加载类、创建对象、调用方法,注解则提供了元数据功能,方便代码管理和工具支持。 通过这些源代码,学习者不仅可以深入理解Java语言的特性和用法,还能培养良好的编程习惯...
反射机制、泛型、枚举、注解等也是高级主题,它们在实际开发中有着广泛的应用。 Java还特别重视API的使用,如JDBC(Java Database Connectivity)用于数据库操作,Swing和JavaFX用于图形用户界面(GUI)开发,...
2. **写入Excel数据**:同样,通过注解和反射机制,Easypoi可以将Java对象的数据写入到Excel中。开发者只需要创建一个对象列表,调用相应的方法,就能自动生成Excel文件。 3. **模板处理**:Easypoi支持使用模板来...