Android 属性拷贝,属性复制的工具类

Android中浅拷贝与深拷贝,android开发实战数据 拷贝即clone,在Java语言中,通过调用clone方法来实现复制一个对象。首先应该划分一个和目标对象空间一致的内存空间,在该空间中根据目标对象的数据来创建一个新的对象。 Java中使用new和clone方法创建一个对象的不同: 使用new操作符。new操作符用来分配内存,程序执行到new操作符时, 首先去看new操作符后面的类型,因为知道了类型,才能知道要分配多大的内存空间。分配完内存之后,再调用构造函数,填充对象的各个域,这一步叫做对象的初始化,构造方法返回后,一个对象创建完毕,可以把他的引用(地址 阅读详情
package com.wbm.app.utils;

import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

/**
 * Created by Kodulf
 */
public class BeanPropertiesUtil {
    /**
     * 利用反射实现对象之间属性复制
     * @param from
     * @param to
     */
    public static void copyProperties(Object from, Object to) throws Exception {
        copyPropertiesExclude(from, to, null);
    }

    /**
     * 复制对象属性
     * @param from
     * @param to
     * @param excludsArray 排除属性列表
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
    public static void copyPropertiesExclude(Object from, Object to, String[] excludsArray) throws Exception {
        List<String> excludesList = null;
        if(excludsArray != null && excludsArray.length > 0) {
            excludesList = Arrays.asList(excludsArray);	//构造列表对象
        }
        Method[] fromMethods = from.getClass().getDeclaredMethods();
        Method[] toMethods = to.getClass().getDeclaredMethods();
        Method fromMethod = null, toMethod = null;
        String fromMethodName = null, toMethodName = null;
        for (int i = 0; i < fromMethods.length; i++) {
            fromMethod = fromMethods[i];
            fromMethodName = fromMethod.getName();
            if (!fromMethodName.contains("get") || fromMethodName.contains("getId"))
                continue;
            //排除列表检测
            if(excludesList != null && excludesList.contains(fromMethodName.substring(3).toLowerCase())) {
                continue;
            }
            toMethodName = "set" + fromMethodName.substring(3);
            toMethod = findMethodByName(toMethods, toMethodName);
            if (toMethod == null)
                continue;
            Object value = fromMethod.invoke(from, new Object[0]);
            if(value == null)
                continue;
            //集合类判空处理
            if(value instanceof Collection) {
                Collection newValue = (Collection)value;
                if(newValue.size() <= 0)
                    continue;
            }
            toMethod.invoke(to, new Object[] {value});
        }
    }

    /**
     * 对象属性值复制,仅复制指定名称的属性值
     * @param from
     * @param to
     * @param includsArray
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
    public static void copyPropertiesInclude(Object from, Object to, String[] includsArray) throws Exception {
        List<String> includesList = null;
        if(includsArray != null && includsArray.length > 0) {
            includesList = Arrays.asList(includsArray);	//构造列表对象
        } else {
            return;
        }
        Method[] fromMethods = from.getClass().getDeclaredMethods();
        Method[] toMethods = to.getClass().getDeclaredMethods();
        Method fromMethod = null, toMethod = null;
        String fromMethodName = null, toMethodName = null;
        for (int i = 0; i < fromMethods.length; i++) {
            fromMethod = fromMethods[i];
            fromMethodName = fromMethod.getName();
            if (!fromMethodName.contains("get"))
                continue;
            //排除列表检测
            String str = fromMethodName.substring(3);
            if(!includesList.contains(str.substring(0,1).toLowerCase() + str.substring(1))) {
                continue;
            }
            toMethodName = "set" + fromMethodName.substring(3);
            toMethod = findMethodByName(toMethods, toMethodName);
            if (toMethod == null)
                continue;
            Object value = fromMethod.invoke(from, new Object[0]);
            if(value == null)
                continue;
            //集合类判空处理
            if(value instanceof Collection) {
                Collection newValue = (Collection)value;
                if(newValue.size() <= 0)
                    continue;
            }
            toMethod.invoke(to, new Object[] {value});
        }
    }



    /**
     * 从方法数组中获取指定名称的方法
     *
     * @param methods
     * @param name
     * @return
     */
    public static Method findMethodByName(Method[] methods, String name) {
        for (int j = 0; j < methods.length; j++) {
            if (methods[j].getName().equals(name))
                return methods[j];
        }
        return null;
    }
}

【Android】拷贝文件到另一个目录下 /** * 复制单个文件 * @param oldPath String 原文件路径 如:c:/fqf.txt * @param newPath String 复制后路径 如:f:/fqf.txt * @return boolean */ public void copyFile(String oldPath, String ne 阅读详情

相关推荐

Android 文件复制功能实现

在 Android 开发中,我们经常需要实现文件的复制功能,即将一个文件的内容复制到另一个文件中。上述代码示例提供了一种简单的文件复制实现方式,但在实际的应用中,还可以根据具体需求进行功能扩展和优化。需要注意的是,为了在 Android 应用中进行文件操作,你可能需要在 AndroidManifest.xml 文件中添加适当的权限声明,例如读取和写入外部存储器的权限。然后,我们使用一个字节数组作为缓冲区,通过循环读取源文件的内容,并将其写入目标文件中。对象来读取源文件的内容,并创建了一个。

ByteWhizX的博客 776

android——深拷贝、过滤

【代码】android——深拷贝。

wy313622821的博客 1077

Unity安卓加载StreamingAssets目录文件夹下的AB包资源且将资源拷贝至安卓持久化目录(PersistentDataPath)下

一、将资源打包为安卓平台下的AB包 ①核心脚本如下所示 string strABOutPathDIR = Application.streamingAssetsPath+"/Android"; BuildPipeline.BuildAssetBundles(strABOutPathDIR, BuildAssetBundleOptions.ChunkBasedCompression, Buil...

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 9312

对象拷贝工具类BeanUtils

常用的对象拷贝方法有三种: 1.通过set,get方法: //创建user类 public class User { private String name; private String age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Stri

wzs535131的博客 1667

工控上位机开发学习路线与核心技术解析

工控上位机开发是工业自动化领域的关键技术,通过计算机软件实现对工业设备的监控与控制。其核心在于掌握工业通信协议(如Modbus、OPC UA)、数据处理算法和可视化开发三大能力。上位机系统需要高效解析设备通信协议,处理实时数据,并提供直观的人机交互界面。在智能制造浪潮下,掌握C#语言和工业协议开发能力成为工程师的核心竞争力。典型应用场景包括生产线监控、设备远程运维等。本文基于工业现场实践经验,详解从协议解析到界面优化的全链路开发要点,特别针对Modbus协议调优、WPF性能优化等高频问题提供解决方案。

weixin_30376083的博客 550

手把手教你用STM32F103C8T6驱动HUB75 LED点阵屏(附74HC595级联代码)

本文详细介绍了如何使用STM32F103C8T6开发板驱动HUB75接口的LED点阵屏,包括硬件连接、74HC595级联代码、时序控制及灰度显示实现。通过实战案例展示动态文字显示和性能优化技巧,帮助开发者快速掌握LED点阵屏驱动技术。

weixin_42623010的博客 341

Android 深拷贝 (clone方法实现)

Android 深拷贝 (clone方法实现)

zz51233273的博客 1098

未连接互联网的银河麒麟v10安装g++,各种报错,如何处理?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 备注:部分问题/疑难杂症搜集于互联网。

**My Coding Family** 1803

分享一个JavaBean属性拷贝工具类,超好用。

文章目录一,代码片二,使用样例三,最后 一,代码片 分享一个JavaBean属性拷贝工具类,废话不多说,直接上代码: import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * 属性拷贝工具,支持继承,要拷贝的属性必须有get,set的公用方法 * * @author .

大团猿的博客 661

STM32外部中断EXTI原理与飞控实时应用实战

外部中断(EXTI)是嵌入式系统中实现事件驱动和实时响应的核心机制,其本质是将外部电平变化转化为可调度的CPU中断事件。基于ARM Cortex-M NVIC架构,EXTI通过GPIO-EXTI-NVIC三级硬件通路实现低延迟信号捕获,具备边沿触发、优先级管理与挂起控制等关键能力。在四轴飞控、工业传感器、人机交互等对毫秒级响应有强需求的场景中,EXTI显著优于轮询方式,兼顾实时性与CPU资源效率。实际开发需严格遵循SYSCFG映射→EXTI配置→NVIC使能的时序逻辑,并规避常见陷阱如中断号误配、伪触发、低

weixin_36382073的博客 65

【示波器专题】示波器探头的原理深入——有源探头之差分有源探头

差分有源探头是一种特殊的有源探头,与普通单端有源探头的区别在于其前端的放大器是差分放大器。差分放大器的好处是可以直接测试高速差分信号,同时其共模抑制比高,对共模噪声的抑制能力比较好。...

一点硬件 2624

一个Bean属性拷贝的工具类

  package com.fpi.spring.qaepb.cps.util; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutp...

白强 277

yolov26改进 | Neck/颈部创新篇 | 独创HFPN利用分层特征融合块HFFB模块融合多层次特征改进yolov26(全网独家创新)

本文提出了一种创新的分层特征融合模块HFFB(Hierarchical Feature Fusion Block)来改进YOLOv26的neck部分,构建了名为HFPN的新型特征金字塔网络。该模块通过三分支结构融合局部特征(CNN提取)、全局特征(Swin Transformer提取)和中间特征,并包含空间注意力(SA)、通道注意力(CA)和残差反向MLP(IRMLP)等组件来优化特征融合效果。实验表明,该方法能针对不同尺度目标(大/中/小)进行自适应检测,可根据具体数据集需求选择不同配置。文章详细提供了核

Snu77的博客 483

AndroidStudio 关于安卓项目的复制拷贝 - 防止影响源文件

AndroidStudio 关于安卓项目的复制拷贝 - 防止影响源文件1.在文件管理器中复制粘贴需要拷贝的对象,重命名为你想要的名字2. Import 刚才复制的重命名过的文件(不要open!)3.进入应用结构,修改项目ID3. 清除project4.Refacor文件名5.修改values 经常会遇到想备份一个安卓项目,然后在他的克隆上进行添加功能,但是有时候一运行安装就把之前的覆盖了,这个时候要如何处理。 1.在文件管理器中复制粘贴需要拷贝的对象,重命名为你想要的名字 2. Import 刚才复制的重

Biu_Destiny的博客 3050

NSIS教程(6): 使用第三方插件

NSIS内置了很多指令,这些指令可以满足我们基本需求,但难免会遇到NSIS没有内置的功能,如进程操作,后台运行(即多线程),7z压缩等等,这个时候我们就需要借助第三方插件来满足我们所需要的功能了。 一、插件获取 NSIS官方收录插件的网址是:http://nsis.sourceforge.net/Category:Plugins,我们可以在这个网站上查找和下载我们需要的插件,该网站上针对每

while(1) { smile(); } 9万+

从生产订单到整车交付,SAP 离散制造在汽车行业里的真实落点

汽车行业谈数字化,很容易一上来就谈智能工厂、数字孪生、AI 排产、无人仓、视觉质检。可落到 SAP 项目现场,真正把工厂撑起来的,往往还是几个很朴素的问题,客户订单来了以后,BOM 能不能准确展开,物料能不能准时到线,产能有没有被过度承诺,生产订单能不能被车间正确执行,质量问题能不能追溯,成本能不能按工单和批次沉淀下来。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 113

复制属性的工具类

在开发中进行遇到值对象和实体间的数据复制. 其中最常用的为Apache BeanUtilsBean的copyProperties. 本次测试发现该工具可兼容大部分数据格式,但在Java.sql.Date和java.util.Date复制时,原数据如为空将发送报错. 通过注册BeanUtilsBean的转换器,简单封装copyProperties方法. 完成效果: 调用封装后的工具类方法复制...

howroad的博客 980

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Android实现深拷贝(附带源码)

Android实现深拷贝(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1602

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android--文件或目录拷贝、复制、粘贴

需要给 AndroidManifest.xml里加上权限: 源码: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import android.ap

超宇的博客 2万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

android 深拷贝对象

android 深拷贝对象前言解决方法参考完事 前言 在项目中经常会遇到,有个缓存自定义类型变量需要编辑,但又想不影响原来的数据,所以想将变量A拷贝出一个变量B,对B进行修改。 当然直接赋值是不可以的,如A = B;,在这个过程中,执行了是地址传递,两个对象指向同一个地址,导致修改了B的属性值也同时影响A的属性值。这并不是我们想要的 解决方法 有些会采用实现Cloneable接口并重写Object...

杨迪龙的博客 3741

android全局复制代码,Android Kotlin 全局深拷贝的扩展函数

前言基于Kotlin的扩展函数的特性,我们能很容易封装一个全局的函数来实现某些功能如全局的UI线程回调函数,不管在代码的任何地方,都可以让指定代码块运行到UI线程上这次就分享一个深拷贝的扩展函数思路就是通过反射创建一个新的实例,然后读出要拷贝的对象每一个属性的值再重新怼回去具体可以看代码是怎么实现的/深拷贝fun T.deepCopy(): T {val copiedObjects = muta...

weixin_34452012的博客 764

android复制工具,2款实用的Android 安卓手机任意界面所有文字随意「复制」工具...

通常我们使用手机上的复制粘贴模式,无论 Android 与 iOS 均相同,按住你想要复制的内容,系统会自动选中部分内容,再配合拖拽,完成选择,最后点击复制、剪切或者粘贴。但还是有很多无法选择复制的地方,比如很多APP上看到一些文字很想复制出来拿来用,却碍于app本身的制作和限制,常常无法选择或者无法复制。因此,Universal Copy「全局复制」和Clip Layer 「微软车库」正是为了解...

weixin_42412910的博客 1万+

android 浅复制与深复制

今天,简单讲讲  android 浅复制与深复制的内容。 一、前言 任何变成语言中,其实都有浅拷贝和深拷贝的概念,Java 中也不例外。在对一个现有的对象进行拷贝操作的时候,是有浅拷贝和深拷贝之分的,他们在实际使用中,区别很大,如果对其进行混淆,可能会引发一些难以排查的问题。 本文就在 Java 中的深拷贝和浅拷贝做一个详细的解说。 二、什么是浅拷贝和深拷贝 首先需要明白

谢岩的博客 5369

java List复制:浅拷贝与深拷贝

title: java List复制:浅拷贝与深拷贝 date: 2019-03-13 09:50:28 tags: List复制 comments: true categories: Java技术 List浅拷贝   众所周知,list本质上是数组,而数组的是以地址的形式进行存储。   如上图将list A浅拷贝给list B,由于进行的是浅拷贝,所以直接将A的内容复制给了B,java中相同...

oメ嘹⑩咋o咧!歡迎來访ー訫隨の飛ー专栏 576

android深拷贝,Android LayoutParams的深拷贝

// 通用的复制属性方法private fun cloneParams(params: ViewGroup.LayoutParams): ViewGroup.LayoutParams {val paramsClass = params.javaClassval newInstance =Class.forName(paramsClass.name).getConstructor(ViewGroup...

weixin_39775428的博客 454

一文教你区分赋值、浅拷贝和深拷贝,手撕浅拷贝与深拷贝函数

通过这篇文章,你可以区分赋值,浅拷贝,深拷贝。除此之外,你还可以手写一个浅拷贝函数,了解多种方式实现深拷贝。在没认真了解之前,我一直以为赋值是浅拷贝的一种。但实际上,它们根本不是一个东西。

Concise200的博客 2014
上一篇: object 类的set和get方法,点语法 和 属性生成器
下一篇: Mysql date的大于某一个时间点
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值