Java类之间有相同属性名之间的赋值

2 篇文章 0 订阅

使用这个工具类即可实现,但是不灵活。我们可以进行封装,自定义一些规则。

import org.springframework.beans.BeanUtils;

BeanUtils.copyProperties(source, target);

比如自定义注解,忽略一些不需要赋值的字段。

为了方便,我使用了@JsonIgnore。

import com.fasterxml.jackson.annotation.JsonIgnore;

 

定义两个类

@Data
class AA {
    public int a;
    private Integer aa;

    private double b;
    @JsonIgnore
    private Double bb;
    @JsonIgnore
    private String c;

    public Date date;

}

@Data
class BB {
    private int a;
    private Integer aa;

    private double b;
    private Double bb;

    private String c;

    private Date date;

}

自定义工具类

public class TransformUtils {

    public static void main(String[] args) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException, NoSuchFieldException {
        AA aa = new AA();
        aa.setA(1);
        aa.setAa(1);
        aa.setC("name");
        aa.setDate(new Date());
        aa.setB(2);
        aa.setBb((double) 2F);
        BB to = (BB)to(aa, BB.class);
        System.out.println(aa);
        System.out.println(to);
    }

    public static Object to(Object source, Class<?> target) throws IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchMethodException {
        // 获得类里面的所有属性 getFields只能获得公有属性
        Field[] fields = source.getClass().getDeclaredFields(); // 获得全部属性 包括私有
        List<String> list = new ArrayList<>(); // 存储需要忽略的字段名
        for (Field field : fields) {
            // 判断字段上面有没有该注解
            if (field.isAnnotationPresent(JsonIgnore.class)) {
                list.add(field.getName()); // 获得属性名
            }
        }
        Constructor constructor = target.getDeclaredConstructor();
        Object result = constructor.newInstance(); // 实例化Class<?>类型
        BeanUtils.copyProperties(source, result, list.toArray(String[]::new));
        return result;
    }

}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Java中,给不同类的相同属性赋值可以通过以下几种方式实现: 1. 使用构造方法:在每个类的构造方法中,传入相同属性的值,并将其赋给对应的属性。 ```java class ClassA { private int attribute; public ClassA(int attribute) { this.attribute = attribute; } // 其他类成员和方法 } class ClassB { private int attribute; public ClassB(int attribute) { this.attribute = attribute; } // 其他类成员和方法 } // 在使用时,创建对应的对象并传入相同属性的值 int attributeValue = 10; ClassA a = new ClassA(attributeValue); ClassB b = new ClassB(attributeValue); ``` 2. 使用Setter方法:在每个类中定义一个公有的Setter方法,通过该方法给属性赋值。 ```java class ClassA { private int attribute; public void setAttribute(int attribute) { this.attribute = attribute; } // 其他类成员和方法 } class ClassB { private int attribute; public void setAttribute(int attribute) { this.attribute = attribute; } // 其他类成员和方法 } // 在使用时,创建对应的对象并调用Setter方法进行赋值 int attributeValue = 10; ClassA a = new ClassA(); a.setAttribute(attributeValue); ClassB b = new ClassB(); b.setAttribute(attributeValue); ``` 3. 静态属性赋值:如果这些属性是静态属性,可以直接通过类名来赋值。 ```java class ClassA { public static int attribute; // 其他类成员和方法 } class ClassB { public static int attribute; // 其他类成员和方法 } // 直接通过类名赋值给静态属性 int attributeValue = 10; ClassA.attribute = attributeValue; ClassB.attribute = attributeValue; ``` 这些是常用的方式,你可以根据具体的需求选择适合的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值