用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

java反射机制Demo

2013-08-03 作者: 神马举报

[java]代码库

package nov;
 
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
 *
 *
 * <p>
 * Title: 反射机制测试代码 /p>
 *
 * <p>
 * Description: 示例 业务类
 * </p>
 *
 * <p>
 * Copyright: Copyright (c) 2012
 * </p>
 *
 *
 * @author dml@2012-11-29
 * @version 1.0
 */
public class ReflectTester {
    public Object copy(Object object) throws Exception {
        // 获得对象的类型
        Class<?> classType = object.getClass();
        System.out.println("Class:" + classType.getName());
 
        // 通过默认构造方法创建一个新的对象
        Object objectCopy = classType.getConstructor(new Class[] {})
                .newInstance(new Object[] {});
 
        // 获得对象的所有属性
        Field fields[] = classType.getDeclaredFields();
 
        for (int i = 0; i < fields.length; i++) {
            Field field = fields[i];
            // 属性名称
            String fieldName = field.getName();
            // 得到属性名称的第一个字母并转成大写
            String firstLetter = fieldName.substring(0, 1).toUpperCase();
            // 获得和属性对应的getXXX()方法的名字:get+属性名称的第一个字母并转成大写+属性名去掉第一个字母,
            // 如属性名称为name,则:get+N+ame
            String getMethodName = "get" + firstLetter + fieldName.substring(1);
            // 获得和属性对应的setXXX()方法的名字
            String setMethodName = "set" + firstLetter + fieldName.substring(1);
 
            // 获得和属性对应的getXXX()方法
            Method getMethod = classType.getMethod(getMethodName,
                    new Class[] {});
            // 获得和属性对应的setXXX()方法,传入参数为参数的类型
            Method setMethod = classType.getMethod(setMethodName,
                    new Class[] { field.getType() });
 
            // 调用原对象的getXXX()方法
            Object value = getMethod.invoke(object, new Object[] {});
            System.out.println(fieldName + ":" + value);
            // 调用拷贝对象的setXXX()方法
            setMethod.invoke(objectCopy, new Object[] { value });
        }
        return objectCopy;
    }
 
    public static void main(String[] args) throws Exception {
        Customer customer = new Customer("Tom", 21);
        customer.setId(new Long(1));
        //运行时生成对象实例:类存在不带参数的构造函数 直接使用newInstance()方法
        Customer customerCopy = (Customer) new ReflectTester().copy(customer);
        System.out.println("Copy information:" + customerCopy.getId() + " "
                + customerCopy.getName() + " " + customerCopy.getAge());
    }
}
 
class Customer {
    private Long id;
 
    private String name;
 
    private int age;
 
    public Customer() {
    }
 
    public Customer(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
    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;
    }
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...