Java实现不同的类的属性之间相互赋值

在开发的时候可能会出现将一个类的属性值,复制给另外一个类的属性值,这在读写数据库的时候,可能会经常的遇到 ,特别是对于一个有继承关系的类的时候,我们需要重写很多多余的代码,下面有一种简单的方法实现该功能,

1、首先有两个类,两个类之间有相同的属性名和类型,也有不同的属性名很类型:

public class ClassTestCopy2 {
    private int id;
    private String name;
    private String password;

    private String sex;
    private String age;
    //get和set方法
}
public class ClassTestCopy1 {
    private int id;
    private String name;
    private String password;

    //get和set方法
}

2、下边的就是实现该功能的方法体:

public static void Copy(Object source, Object dest) throws Exception {
        // 获取属性
        BeanInfo sourceBean = Introspector.getBeanInfo(source.getClass(), java.lang.Object.class);
        PropertyDescriptor[] sourceProperty = sourceBean.getPropertyDescriptors();

        BeanInfo destBean = Introspector.getBeanInfo(dest.getClass(), java.lang.Object.class);
        PropertyDescriptor[] destProperty = destBean.getPropertyDescriptors();

        try {
            for (int i = 0; i < sourceProperty.length; i++) {
                for (int j = 0; j < destProperty.length; j++) {
                    if (sourceProperty[i].getName().equals(destProperty[j].getName())) {
                        // 调用source的getter方法和dest的setter方法
                        destProperty[j].getWriteMethod().invoke(dest, sourceProperty[i].getReadMethod().invoke(source));
                        break;
                    }
                }
            }
        } catch (Exception e) {
            throw new Exception("属性复制失败:" + e.getMessage());
        }
    }

3、下边进行测试:

public static void main(String[] args) {
        ClassTestCopy1 c1 = new ClassTestCopy1(1205030213, "name:xuliugen","password:123456");
        ClassTestCopy2 c2 = new ClassTestCopy2();
        try {
            CopyBeanParamsTest.Copy(c1, c2);
            System.out.println("-------------c1----------------");
            System.out.println(c2.getId());
            System.out.println(c2.getName());
            System.out.println(c2.getPassword());
            System.out.println(c2.getSex());
            System.out.println(c2.getAge());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

4、测试结果如下:

可知具有相同属性名和类型的属性被赋值,剩下的没有被匹配到的结果则为NUll;

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-27 19:40:59

Java实现不同的类的属性之间相互赋值的相关文章

java的接口、类、属性、方法各有哪些修饰符

参考博客:http://blog.csdn.net/cao_tao199612/article/details/7458245 1. 接口的修饰符只有:public 2. 类的修饰符分为:可访问控制符和非访问控制符两种. 可访问控制符是:公共类修饰符 public 非访问控制符有:抽象类修饰符 abstract :最终类修饰符 final 1.公共类修饰符 public : Java 语言中类 的可访问控制符只有一个: public 即公共的.每个 Java 程序的主类都必须是 public 类

通过反射把一个类的属性的值赋值给另一个类

两个类我就不创建了,具体实现方法如下: /// <summary> /// 通过反射把一个类的属性的值赋值给另一个类 /// </summary> /// <typeparam name="D"></typeparam> /// <typeparam name="S"></typeparam> /// <param name="s"></param>

关于Java中byte,short,char,int 之间相互赋值的问题

首先明确这几种数据类的取值范围: byte:  -128~127 short: -2^15~2^15-1 char: 0~65536 int: -2^31~2^31-1 请看以下代码: byte b = 100; short s = b; //正确,因为byte的取值范围在short取值范围之内. char c = b; //错误,因为byte的取值范围不完全在char的取值范围内. c = s;  //错误,因为short的取值范围不完全在char的取值范围内. int x = b; //正确

Java利器之UML类图详解

前言 UML(Unified Modeling Language)中文统一建模语言,是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制品的开放方法.UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效. [维基百科] 最近看一些开源项目的时候,总是看到UML中的类图,一开始自己的做法就是跳过去类图的部分,不过后来又遇到了几次,就决定学习下,不能再选择逃避了,这也是一个即将优秀的程序探索者应该必备的

《同一个类中不同方法之间的调用相关问题(省略的类名或者this)》

1 //同一个类中不同方法之间的调用相关问题(省略的类名或者this) 2 class A 3 { 4 public void B() 5 { 6 System.out.println("b方法运行"); 7 } 8 public void C() 9 { 10 B();//下面引用<疯狂Java讲义>中的一段话. 11 /* 12 因为Java里的方法不能独立存在,它必须属于一个类或一个对象, 13 因此方法也不能直接像函数那样被独立执行,执行方法时必须使用 14 类或对

别名现象,java对象之间的相互赋值

请看一下代码 import java.util.*; class book{ static  int c = null; } public static void main(String[] args){ Book book1 = new book(); Book book2 = new book(); book1.c = 6; book2.c = 4; book1 = book2; } 以上,当book1和book2两个对象之间相互赋值的时候,那么当我们调用Book.c的时候,我们就会发现bo

java类中属性的加载顺序,以及内存分配情况介绍

看下面例子及说明: /** 假如有外部类调用了该类,代码为:new StaticTest(); 那么下面是类属性的加载顺序 */ public class StaticTest{ public int dsd=2;//第3 //多个对象会有多次分配内存 public awds() { int sdsfsd=2;//第4 //多个对象会有多次分配内存 } //静态代码块 static{ System.out.println("静态代码块正在加载...");//第1 } public st

java中如何遍历实体类的属性和数据类型以及属性值

1 package com.walkerjava.test; 2 3 import java.lang.reflect.Field; 4 import java.lang.reflect.InvocationTargetException; 5 import java.lang.reflect.Method; 6 import java.util.Date; 7 8 /*** 9 * 遍历实体类的属性和数据类型以及属性值 10 * 11 * @author LiBaozhen 12 * @dat

java 中利用反射机制获取和设置实体类的属性值

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. JAVA反射(放射)机制:"程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言".从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言.但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可