Java反射学习-5 - 反射复制对象
通过反射方式复制对象:
package cn.tx.reflect; import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method; /**
* 反射复制对象
* @author Administrator
*
*/
public class ReflectLearn5 { public static void main(String[] args) throws Exception {
Person p = new Person(3,"jack","america");
Object obj = copyOjbect(p);
System.out.println(obj);
} public static Object copyOjbect(Object obj) throws Exception{
//获得传递过来的对象的属性和构造器
Class<? extends Object> class1 = obj.getClass();
Field[] fields = class1.getDeclaredFields();
Constructor constructor = class1.getConstructor();
Object instance = constructor.newInstance(null);
for (Field f : fields) {
//获得属性名字
String name = f.getName();
//获得属性类型
Class<?> type = f.getType();
//获得属性对应的set方法
String setMethodName = "set"+ name.substring(0,1).toUpperCase()+name.substring(1);
String getMethodName = "get"+ name.substring(0,1).toUpperCase()+name.substring(1);
//获得get方法
Method gmethod = class1.getDeclaredMethod(getMethodName, null);
//调用get方法获得被复制对象的一个属性值
Object gresult = gmethod.invoke(obj, null);
//get方法的参数类型是string,返回值类型也是
Method smethod = class1.getDeclaredMethod(setMethodName,type);
// Method smethod = class1.getDeclaredMethod(setMethodName,gmethod.getReturnType());
smethod.invoke(instance, gresult); }
return instance;
}
}
结果:

Java反射学习-5 - 反射复制对象的更多相关文章
- Java反射学习-4 - 反射调用方法
反射调用方法: package cn.tx.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Method ...
- 《java JDK7 学习笔记》之对象封装
1.构造函数实现对象初始化流程的封装.方法封装了操作对象的流程.java中还可以使用private封装对象私有数据成员.封装的目的主要就是隐藏对象细节,将对象当做黑箱子进行操作. 2.在java命名规 ...
- Java反射学习-2 - 获取Class对象的三种方式
package cn.tx.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import ...
- java 日常学习记录-反射
Hero类 package helloworld; public class Hero { public String name; //姓名 public float hp; //血量 public ...
- java反射学习之一反射机制概述
一.反射机制背景概述 1.反射(reflection)是java被视为动态语言的一个关键性质 2.反射机制指的是程序在运行时能获取任何类的内部所有信息 二.反射机制实现功能概述 1.只要给定类的全名, ...
- 【java基础学习】反射
1. 什么是反射 Class.Method.Field.Constructor,它们是反射对象.它们是类.方法.成员变量.构造器,在内存中的形式. 也就是万物皆对象!类是类型.方法是类型.成员变量是类 ...
- Java基础学习(1)——反射
反射就是把Java类中的各种成分映射成相应的Java类(主要用于框架开发) 反射的基石–>Class类 Java程序中的各个类属于同一事物,描述这类事务的Java类名就是Class. Class ...
- Java反射学习-3 - 反射获取属性,方法,构造器
package cn.tx.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import ...
- Java反射学习-1 - 反射获取类的属性,方法,构造器
新建一个Person类 package cn.tx.reflect; /** * 注解初步了解 * @author Administrator * */ public class Person { p ...
随机推荐
- 一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制)
PID控制应该算是应用非常广泛的控制算法了.小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制.这里我们从原理上来理解PID控制. PID(proportion ...
- crazyflie四轴飞行器
源地址:http://www.bitcraze.se/2013/02/pre-order-has-started/ Crazyflie是一个开源的纳米四旋翼 来几张靓照 开发平台是开源的,所以原理图和 ...
- WingIIDE 6的licese破解方法(支持python3)
(1) 安装WingIDE成功后启动,激活时输入license id CN123-12345-12345-12345 (2)点击Continue后弹框,拷贝框中的request code(将其放入脚本 ...
- day14—jQuery UI 之dialog部件
转行学开发,代码100天——2018-03-30 今天主要展示jQuery UI 之dialog部件的用法, 参考文档:https://jqueryui.com/dialog/ 本文记录分享初始的引用 ...
- CVTRES : fatal error CVT1100: duplicate resource
升级某些VC6工程到VS2017,除了目录问题外,就是这个. 解决方法: Properties > Linker > Manifest File 第一项,Generate Manifest ...
- C#后台去除字符串最后一个字符
string str = "a,b,c,"; int length = str.length; //获取字符串长度 str = str.substring(0,length-1); ...
- Netty之大动脉Pipeline
Pipeline 设计原理 Channel 与ChannelPipeline: 相信大家都已经知道,在Netty 中每个Channel 都有且仅有一个ChannelPipeline 与之对应,它们的组 ...
- Java_1.Java符号体系
Java符号包含五类:标识符.关键字.常量及字面量.运算符.分隔符 1.标识符 定义:用于标明程序中元素的名字,如类.方法和变量 命名规则: ·由字母.数字.下划线(_)和美元符号($)构成的字母序列 ...
- P3826 [NOI2017]蔬菜
传送门 注意每一单位蔬菜的变质时间是固定的,不随销售发生变化 固定的...... 就是每一个单位的蔬菜在哪一天变质是早就定好了的 发现从第一天推到最后一天很不好搞 考虑反过来,从最后一天推到第一天,这 ...
- MySQL查询时报错Illegal mix of collations
开发十年,就只剩下这套架构体系了! >>> 1.具体场景 两张表分别为: CREATE TABLE `tb_user` ( `id` bigint(20) NOT NULL AU ...