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 ...
随机推荐
- How to: Create a Windows Communication Foundation Client
How to: Create a Windows Communication Foundation Client To create a Windows Communication Foundatio ...
- vm虚拟机用批处理启动和关闭
title vmware 虚拟机开启中 cls&&echo 正在开启VMware虚拟机,请稍候... "D:\vmware\vmware.exe" -x " ...
- 用C#调用C++DLL提示找不到DLL解决方法【转】
用C#调用自己写的C++ DLL(x64),总是提示找不到DLL,调试可以,发布release老是提示找不到DLL(dll文件确定存在) 原因:Visual C++的DLL分发方式没选:调试默认选择: ...
- Caffe深入分析(源码)
Caffe的整体流程图: 程序入口:main() int main(int argc, char** argv) { ..... ]))(); .... } g_brew_map实现过程,首先通过 t ...
- EL表达式(三)自定义 EL 表达式
自定义EL函数(静态方法): 编写步骤: 1.编写一个Java类,提供一个静态方法 import java.util.List; public class GetLength { public sta ...
- poj3669 Meteor Shower (宽度优先搜索)
Description - 题目描述 Bessie听说有场史无前例的流星雨即将来临:有谶言:陨星将落,徒留灰烬.为保生机,她誓将找寻安全之所(永避星坠之地).目前她正在平面坐标系的原点放牧,打算在群星 ...
- 2019/10/27 TZOJ
1001 Gaussian Prime http://www.tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=379 ...
- Support Vector Machine(4):SMO算法
经过上一篇的推导,我们的优化问题已经化为了如下等价形式: 我们在不考虑任何约束条件的情况下去想这个minimize的问题,可以将其抽象为: SMO算法的思想是,每次迭代,只改变一个参数,而将n-1个参 ...
- [LeetCode] 137. Single Number II (位操作)
传送门 Description Given an array of integers, every element appears three times except for one, which ...
- bootstrap-select、datatables插件使用
1.引入样式文件 <%--引入bootstrap_select样式--%> <link rel="stylesheet" type="text/css& ...