csdn_sqj
csdn_sqj
2020-03-05 15:28
采纳率: 60.3%
浏览 1.2k
已采纳

java:一个实体类要怎么把里面的内容移植or复制到另一个实体类里?

Class A{
private String username;
private int id;
private long money;
}

Class B{
private String username;
private int id;
private long money;
private String phone;
private String address;
}

假设,Class A 是对应数据库里的表单的实体类。而 Class B 是我拿到 A 以后,要自己补充了信息的一个类。

最后要在前端展示的是 B

请问 怎么操作才能把 A 里的内容放到 B 里面?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • qq_36911145
    封印di恶魔 2020-03-05 15:54
    已采纳
    BeanUtils.copyProperties(A,B);
    

    用org.springframework.beans.BeanUtils类做对象间的拷贝
    第一个参数是源数据, 第二个参数是你接收数据的类

    点赞 评论
  • badboy_ankai
    badboy_ankai 2020-03-05 15:51

    1、简单对象用潜拷贝。
    2、复杂对象用深拷贝。
    3、实在不会,手动写转换类。
    4、想省事就用序列化/反序列化。

    点赞 评论
  • qq_43345230
    DariusEle 2020-03-05 18:05

    package com.cn.darius;

    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;

    public class BeanCopyUitl {

    public static void reflectAbeanToBbean(Object class1,Object class2) throws NoSuchMethodException,  
    IllegalAccessException, IllegalArgumentException,  
    InvocationTargetException { 
    // 获取实体类的所有属性,返回Field数组  
        Field[] field1 = class1.getClass().getDeclaredFields();
        Field[] field2 = class2.getClass().getDeclaredFields();
        for (int i = 0; i < field1.length; i++) {  
        // 获取属性的名字  
            String name = field1[i].getName();  
            // 将属性的首字符大写,方便构造get,set方法  
            name = name.substring(0, 1).toUpperCase() + name.substring(1);  
            Method m1 = class1.getClass().getMethod("get" + name);  
            // 调用getter方法获取属性值  
            Object value =  m1.invoke(class1);  
            if (value != null) {  
                Field f = field2[i];  
                f.setAccessible(true); //设置些属性是可以访问的  
               // Object val = f.get(class2);//得到此属性的值     
                f.set(class2,value) ;        //给属性设值  
            } 
        }
    }
    

    }

    上面是util类可以直接复制下来用 下面是测试类

    package com.cn.darius;

    import java.lang.reflect.InvocationTargetException;

    public class Student {

    private String name;
    private String studentId;
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getStudentId() {
        return studentId;
    }
    
    public void setStudentId(String studentId) {
        this.studentId = studentId;
    }
    
    public Student(String name, String studentId) {
        super();
        this.name = name;
        this.studentId = studentId;
    }
    
    public static void main(String[] args) throws IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
        B b = new B();
        BeanCopyUitl.reflectAbeanToBbean(new Student("2","2"), b);
        System.out.println(b);
    }
    

    }

    class B{
    private String name;
    private String studentId;
    private Integer age;
    private String grade;
    @Override
    public String toString() {
    return "B [name=" + name + ", studentId=" + studentId + ", age=" + age
    + ", grade=" + grade + "]";
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getStudentId() {
    return studentId;
    }
    public void setStudentId(String studentId) {
    this.studentId = studentId;
    }
    public Integer getAge() {
    return age;
    }
    public void setAge(Integer age) {
    this.age = age;
    }
    public String getGrade() {
    return grade;
    }
    public void setGrade(String grade) {
    this.grade = grade;
    }

    }

    好用记得采纳哦

    点赞 评论
  • slevenxulianjie
    slevenxulianjie 2020-03-05 20:19

    给一个Hibernate hql的方法,直接在*hql*里,使用select new
    示例:

    select new B(username,id,money) from A 
    

    注意: B实体类中得有一个参数为空的构造函数

    希望帮到你,呵呵,刚发现这么举例,代码里有个new B,不是故意的

    点赞 评论

相关推荐