`
bdk82924
  • 浏览: 565175 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

反射拷贝属性

 
阅读更多
 /**
     * 属性复制类
     * 
     * @param arg0
     *            源Class
     * @param arg1
     *            目标Class
     */
    public static void copyProperties(Object arg0, Object arg1)

    {
        Field[] fields = arg0.getClass().getDeclaredFields();
        try
        {
            for (Field field : fields)
            {

                String getName = "get" + charSwitch(field.getName());
                Method getMethod = arg0.getClass().getDeclaredMethod(getName);
                Object obj = getMethod.invoke(arg0);
                if (null != obj)
                {
                    String setName = "set" + charSwitch(field.getName());
                    Method setMethod = arg1.getClass().getDeclaredMethod(
                            setName, obj.getClass());
                    setMethod.invoke(arg1, obj);
                }
            }
        }
        catch (Exception e)
        {
            throw new PortalRuntimeException(e.getMessage(),
                    PortalErrorCodes.ERROR_COPYPROPERTIES);
        }
    }
    
    /**
     * 属性复制类
     * 
     * @param arg0
     *            源Class
     * @param arg1
     *            目标Class
     * @param classes
     *            要过滤的类型
     */
    public static void copyProperties(Object arg0, Object arg1,Class...classes)

    {
        Field[] fields = arg0.getClass().getDeclaredFields();
        try
        {
            for (Field field : fields)
            {
                String getName = "get" + charSwitch(field.getName());
                Method getMethod = arg0.getClass().getDeclaredMethod(getName);
                Object obj = getMethod.invoke(arg0);
              
                if (isClsaa(obj,classes))
                {
                    continue;
                }
                if (null != obj)
                {
                    String setName = "set" + charSwitch(field.getName());
                    Method setMethod = arg1.getClass().getDeclaredMethod(
                            setName, obj.getClass());
                    setMethod.invoke(arg1, obj);
                }
            }
        }
        catch (Exception e)
        {
            throw new PortalRuntimeException(e.getMessage(),
                    PortalErrorCodes.ERROR_COPYPROPERTIES);
        }
    }
分享到:
评论

相关推荐

    通过构造及反射实现类属性赋值

    标题中的“通过构造及反射实现类属性赋值”涉及到的技术是Java的构造函数和反射机制。这两种方法在特定场景下能帮助我们更灵活、更深入地处理对象属性的复制。 首先,构造函数是创建新对象时调用的特殊方法,它可以...

    C#浅拷贝(MemberwiseClone等多种方法)与深拷贝(反射、多种反序列化)实例

    本文将深入探讨这两种拷贝方式以及它们在C#中的实现方法,特别是如何使用`MemberwiseClone`、反射以及反序列化技术。 首先,浅拷贝是通过`Object.MemberwiseClone()`方法来实现的。这个方法为对象创建一个新的实例...

    BeanUtil属性拷贝工具类

    BeanUtil属性拷贝工具类,支持基本的javabean属性拷贝,通过java反射和泛型编程实现了list属性拷贝

    类属性拷贝器(源码)

    - **拷贝属性值**:通过反射调用getter和setter方法,将源对象的属性值复制到目标对象相应属性。 4. **BeanUtils.cs的实现** `BeanUtils.cs`文件很可能是实现了上述功能的C#类。通常,此类会包含一个静态方法,如...

    利用反射技术实现POJO值拷贝

    本篇文章将探讨如何利用反射技术实现POJO(Plain Old Java Object)值的拷贝,这对于数据传输、对象复制等场景非常有用。 POJO是一个简单的Java对象,没有特定的框架限制,通常包含一组属性和对应的getter/setter...

    使用反射+缓存+委托实现一个不同对象之间同名同类型属性值的快速拷贝的小程序

    分享一个使用反射+缓存+委托,实现一个不同对象之间同名同类型属性值的快速拷贝 的小程序, http://blog.csdn.net/bluedoctor/article/details/8424510 是原理说明,相信请看链接文章。

    C#深度拷贝克隆源码

    深度拷贝是指创建一个新对象,这个新对象复制了原始对象的所有属性,包括嵌套的对象或集合。这意味着,如果原始对象中的某个属性是一个复杂的数据结构,如数组或自定义类型,深度拷贝会递归地复制这些结构的所有层次...

    C#基于表达式(Expression)实现对象深拷贝

    然而,这种方法存在局限性,例如无法处理非公共属性、私有字段、静态成员或嵌套类型的深拷贝,以及无法处理循环引用的问题。在实际项目中,可能需要更复杂的逻辑来处理这些情况,例如使用`ICloneable`接口、反射、...

    利用annotation完成对象间的属性拷贝

    在Java开发中,对象间的属性拷贝是一个常见的需求,特别是在数据转换、模型绑定或服务调用等场景。本文将深入探讨如何利用注解(Annotation)来实现这一功能,以提高代码的可读性和可维护性。我们将从标题“利用...

    C# 使用反射来实现对象的深度复制方法

    在实现深度复制时,反射可以帮助我们遍历对象的所有成员,包括字段和属性,然后逐个复制它们。 以下是一个使用反射实现对象深度复制的示例代码: ```csharp public static class DeepCopyHelper { public static ...

    java反射机制创建对象实现:java 深度拷贝 -超完美

    Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查并操作类、接口、对象等的内部属性和方法。在给定的标题和描述中,我们关注的是如何利用反射机制来实现对象的深度拷贝。深度拷贝是指创建一个与...

    BeanConvertor工具类Java开发Bean转换拷贝工具类

    内容概要:本资源提供了一个Java Bean转换工具类示例,展示了如何使用反射和JSON序列化实现对象之间的属性拷贝。该工具类包含两个主要方法:convertTo和convertByJackson,前者基于反射用于结构相同的对象间的属性...

    java反射以及复制一个bean的值到另一个bean中。

    Java没有内置的深拷贝机制,但可以通过反射实现。假设我们有两个 `Person` 类的实例 `person1` 和 `person2`,我们想要将 `person1` 的属性值复制到 `person2`: ```java public static void copyBeanProperties...

    Java 细数浅拷贝和深拷贝

    浅拷贝(Shallow Copy)是在对象的属性为基本数据类型时拷贝这些值,对于属性为引用数据类型的,则拷贝对象的引用而非实际创建一个新的对象。这意味着,如果原始对象的引用数据类型的值发生变化,拷贝后的对象的相同...

    利用反射,动态加载DLL,卸载DLL

    另外,将DLL拷贝到应用程序的运行目录下可以简化路径管理。 总结来说,反射动态加载DLL是.NET编程中的一个重要技巧,尤其是在需要动态更新或插件式架构的应用中。正确处理加载和卸载,可以有效地实现DLL的更新和...

    Java语言的反射机制

    其`copy(Object object)`方法通过反射实现了对象的深拷贝。首先获取对象的类型,然后通过默认构造方法创建新对象,接着获取所有属性,遍历这些属性并使用对应的get和set方法复制属性值。注意,此方法仅适用于遵循...

    Java反射机制总结(实例分析)

    - **通用工具类**:例如深度拷贝、属性复制等,反射可以方便地在不同对象间复制属性。 以下是一个简单的反射使用示例: ```java public class ReflectTester { public Object copy(Object object) throws ...

    C#深浅拷贝的深入解析

    深浅拷贝的深入解析 摘要:本文主要讲解了C#中的深浅拷贝,通过示例代码详细介绍了浅拷贝和深拷贝的概念和应用场景,并对字符串类型的不可变性进行了深入解析。 浅拷贝是将对象中的所有字段复制到新对象中去,对于...

    java 反射机制 详细讲解

    这个例子展示了如何使用反射来创建一个对象的深拷贝,即复制对象及其所有属性。 #### 动态代理 Java反射机制还支持动态代理,通过`java.lang.reflect.Proxy`类和`InvocationHandler`接口可以实现在运行时动态创建...

Global site tag (gtag.js) - Google Analytics