「java属性复制」java属性复制依赖

博主:adminadmin 2023-03-21 12:33:09 429

今天给各位分享java属性复制的知识,其中也会对java属性复制依赖进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Java如何比较轻松的实现相似属性对象的赋值

你指的是两个对象的属性相似,然后要把a对象属性的值赋值给b对象是吧

一种是直接set

b.setName(a.getName());

b.setAge(a.getAge());

缺点是每次都要把全部属性写一篇 比较麻烦,如果对象的属性有增减这里的赋值也要同步修改

一种是通过反射赋值

这个你可以参考下这两篇博客

java利用反射完成不同类之间相同属性的复制

java -- 利用反射实现对象之间相同属性复制BeanUtil

这个每次的写法简单很多,缺点就是灵活性没有自己写高,因为是使用了反射所以效率也没有直接写高

java中BeanUtils框架copyProperty方法和setProperty的区别

查看api后发现copyPorperty是从源bean中复制property然后设置到目标bean中。set是设置bean的property。如下:

copyProperties(Object dest, Object orig)

Copy property values from the origin bean to the destination bean for all cases where the property names are the same.

setProperty(Object bean, String name, Object value)

Set the specified property value, performing type conversions as required to conform to the type of the destination property.

Java中,复制一个对象,有什么好的方法

使用Java的反射机制实现:为了能更好的区分,写成了两个类,可以运行下面的代码看看效果

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

public class Test {

public static void main(String[] args) throws Exception {

Customer1 c1 = new Customer1();

c1.setName("c1");

ListString list = new ArrayListString();

list.add("1");

list.add("2");

c1.setList(list);

MapString,String map = new HashMapString, String();

map.put("map1", "map1");

map.put("map2", "map2");

c1.setMap(map);

Customer2 c2 = new Customer2();

//

Class c = c1.getClass();

Class class2 = c2.getClass();

Field fields[] = c.getDeclaredFields();

for (int i = 0; i fields.length; i++) {

Field field = fields[i];

String fieldName = field.getName();

String firstLetter = fieldName.substring(0, 1).toUpperCase();

String getMethodName = "get" + firstLetter + fieldName.substring(1);

String setMethodName = "set" + firstLetter + fieldName.substring(1);

Method getMethod = c.getMethod(getMethodName, new Class[] {});

Method setMethod = class2.getMethod(setMethodName,

new Class[] { field.getType() });

Object value = getMethod.invoke(c1, new Object[] {});

setMethod.invoke(c2, new Object[] { value });

}

System.out.println(c2.getName());

System.out.println(c2.getList());

System.out.println(c2.getMap());

}

}

class Customer1 {

private String name;

private ListString list;

private MapString, String map;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public ListString getList() {

return list;

}

public void setList(ListString list) {

this.list = list;

}

public MapString, String getMap() {

return map;

}

public void setMap(MapString, String map) {

this.map = map;

}

}

class Customer2 {

private String name;

private ListString list;

private MapString, String map;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public ListString getList() {

return list;

}

public void setList(ListString list) {

this.list = list;

}

public MapString, String getMap() {

return map;

}

public void setMap(MapString, String map) {

this.map = map;

}

}

java中克隆一个对象对象的属性改变另一个改变吗

不改变。java中克隆一个对象对象的属性改变另一个不改变。属于值传递,改变一个对象的值,另一个不会受影响。

Java中如何通过序列化进行深层复制

先创建两个类,一个学生类和一个课程类(两个类都要实现Serializable接口才能被序列化),学生类有一个属性为课程。

import java.io.Serializable;

/**

 * 课程类

 */

public class Course implements Serializable {

    private String name;

    public Course(String name) {

        this.name = name;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

}

import java.io.Serializable;

/**

 * 学生类

 */

public class Student implements Serializable {

    // 学号

    private int id;

    // 姓名

    private String name;

    // 课程

    private Course course;

    public Student() {

    }

    public Student(int id, String name, Course course) {

        this.id = id;

        this.name = name;

        this.course = course;

    }

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public Course getCourse() {

        return course;

    }

    public void setCourse(Course course) {

        this.course = course;

    }

}

对象复制:

import java.io.*;

public class ObjectCopy {

    public static void main(String[] args) {

        Course course = new Course("java程序设计");

        Student stu = new Student(1, "jack", course);

        System.out.println("原对象hashcode:" + stu.hashCode());

        try {

            // 序列化

            ByteArrayOutputStream baos = new ByteArrayOutputStream();

            ObjectOutputStream oos = new ObjectOutputStream(baos);

            oos.writeObject(stu);

            // 反序列化

            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());

            ObjectInputStream ois = new ObjectInputStream(bais);

            // 复制后的对象

            Student copy = (Student) ois.readObject();

            System.out.println("新对象hashcode:" + copy.hashCode());

            System.out.println(copy.getCourse().getName());

        } catch (IOException e) {

            e.printStackTrace();

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        }

    }

}

关于java属性复制和java属性复制依赖的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。