java 利用反射 对不同对象的不同属性进行赋值

背景:现在我们想要将Source这个类的userName属性值赋值给Target这个类的nickName 。 理所当然我们会这么写:

Source source = new Source();
Target target = new Target();
target.setNickName(source.getUserName());

但是有的时候往往属性值非常多的时候 就需要无脑的写get,set 。 小生最近需要做一个数据上报的需求,几十个接口,各种无脑转换 ,So 突发奇想 写一个工具来实现这个效果 。

首先我们有2个基础类 。

Source和Target

package com.wc.ly.entity;

import com.wc.ly.annotation.FieldAnnotation;

public class Source {

    
    private String userName;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
}
package com.wc.ly.entity;


public class Target {

    //昵称
    private String nickName;

    // 实际姓名
    private String realName;

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    public String getRealName() {
        return realName;
    }

    public void setRealName(String realName) {
        this.realName = realName;
    }
}

还是要将Source这个类的userName属性值赋值给Target这个类的nickName 。

第一步 : 我们给Source类的userName 加上自定义的注解

    // 用户姓名
    @FieldAnnotation(values = "nickName")
    private String userName;

第二步:调用我们的工具类方法:

    @Test
    public void test1() throws Exception {
        Source source = new Source();
        source.setUserName("张3");
        Target target = new Target();
        BeanUtils.copyProperties(source,target);
        System.out.println(target.getNickName());
        // 此处 输出 张3 
    }

这就解决啦。

 

注意点:

    1、如果 source 有父类,那么可以给父类的属性值也加上注解 ,同样可以 set到 target中

    2、因为是利用反射的方式获取的父类,所以不能同时source继承target ,target集成source

   3、如果想要将source的userName 同时 set到 target的 nickName和realName上面去 ,那么只要添加注解的时候使用数组就OK啦。

// 用户姓名
    @FieldAnnotation(values = {"nickName","realName"})
    private String userName;

测试:

   @Test
    public void test1() throws Exception {
        Source source = new Source();
        source.setUserName("张3");
        Target target = new Target();
        BeanUtils.copyProperties(source,target);
        System.out.println(target.getNickName()+":"+ target.getRealName());
        // 此处 输出 张3:张3
    }

 

 

链接:https://pan.baidu.com/s/1E4NclpfqU2hARgPy4jf_kg
提取码:8vhe
 

 

 

 

 

 

你可能感兴趣的:(java基础)