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个回答

BeanUtils.copyProperties(A,B);

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

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;
}

}

好用记得采纳哦

qq_36911145
封印di恶魔 我看了下你的那个方法,那个方法有局限性,只能在相同字段在所在的类中index相同的情况下才能用,想用这种底层写法,最好是拿出数据后再通过fieldName获取第二个类中的setMethod再进行赋值比较严谨
5 个月之前 回复

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

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

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

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐