通过反射获取类中的属性,并且将类中的属性名称以及对应的值赋给另一个类中的对象

通过反射获取类中的属性,并且将类中的属性名称以及对应的值赋给另一个类中的对象

一、创建一个需要被反射的类

public class Test {
    private String name;
    private String docementNo;
    private String subreportIDs;
    private String refID;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDocementNo() {
        return docementNo;
    }
    public void setDocementNo(String docementNo) {
        this.docementNo = docementNo;
    }
    public String getSubreportIDs() {
        return subreportIDs;
    }
    public void setSubreportIDs(String subreportIDs) {
        this.subreportIDs = subreportIDs;
    }
    public String getRefID() {
        return refID;
    }
    public void setRefID(String refID) {
        this.refID = refID;
    }
}

二、 创建一个希望反射中将名称和值赋给的类

public class Item {
    
    private String name;
    private String value;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    @Override
    public String toString() {
        return "Item [name=" + name + ", value=" + value + "]";
    }

三、 反射对应函数

public static List<Item> getProperty(Object entityName) throws Exception{
        List<Item> list = new ArrayList<>();
        Class c = entityName.getClass();
        Field field[] = c.getDeclaredFields();
        for(Field f:field){
            Item item = new Item();
            Object v = invokeMethod(entityName,f.getName(),null);
            item.setName(f.getName());
            item.setValue(v.toString());
            list.add(item);
            System.out.println(f.getName() + "\t" + v + "\t" + f.getType());
        }
        return list;
}

private static Object invokeMethod(Object owner, String methodName,  
            Object[] args) throws Exception{
        Class ownerClass = owner.getClass();
        
        System.out.println("methodName=="+methodName);
        methodName = methodName.substring(0, 1).toUpperCase()  
                + methodName.substring(1);  
        Method method = null;  
        try {  
            method = ownerClass.getMethod("get" + methodName);  
        } catch (SecurityException e) {  
        } catch (NoSuchMethodException e) {  
            return " can't find 'get" + methodName + "' method";  
        }  
        return method.invoke(owner);  
}

四、 调用

Test test = new Test();
test.setName("222");
test.setDocementNo("3333");
test.setSubreportIDs("4444");
test.setRefID("5555");

List<Item> list = getProperty(test);

五、 结果




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值