`

JAVA反射机制实现复制一个对象

阅读更多
1.JAVA中无论生成一个类的多少个对象,这些对象都会对应同一个Class对象.
2.获取某个类或对象所对应的Class对象的常用的3种方式:
   a.使用Class类的静态方法forName,Class.forName("java.lang.String");
   b.使用.class语法:String.class;
   c.使用对象的getClass()方法: String s = "aa"; Class<?> clazz = s.getClass();

3.若想通过类的不带参数的构造方法来生成对象,我们有两种方式:
   a.先将获得Class对象,然后通过该Class对象的newInstance()方法直接生成即可:Class<?> classType = String.class;Object obj = classType.newInstance();
   b.先获得Class对象,然后通过该对象获得对应的Constructor对象,
在通过该Constructor对象的newInstance()方法生成
package com.jelly.reflect;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * JAVA反射技术
 * 
 * @author Jelly QQ:136179492
 * 
 */
public class ReflectTester {
	/**
	 * 通过一个对象利用反射技术将其复制
	 * 
	 * @param 参数object
	 * @return 复制的Object对象
	 * @throws Exception
	 */
	public Object copy(Object object) throws Exception {
		Class<?> classType = object.getClass();
		Object obj = classType.getConstructor(new Class[] {}).newInstance(
				new Object[] {});
		Field[] fields = classType.getDeclaredFields();
		for (Field field : fields) {
			String name = field.getName();
			String firstLetter = name.substring(0, 1).toUpperCase();
			String getMethodName = "get" + firstLetter + name.substring(1);
			String setMethodName = "set" + firstLetter + name.substring(1);
			Method getMethod = classType.getMethod(getMethodName,
					new Class[] {});
			Method setMethod = classType.getMethod(setMethodName,
					new Class[] { field.getType() });
			Object value = getMethod.invoke(object, new Object[] {});
			System.out.println(value);
			setMethod.invoke(obj, new Object[] { value });
		}
		return obj;
	}

	public static void main(String[] args) throws Exception,
			InvocationTargetException {
		ReflectTester test = new ReflectTester();
		Customer customer = new Customer("jelly", 23);
		Customer obj = (Customer) test.copy(customer);
		System.out.println(obj.getName() + obj.getAge());
	}
}

class Customer {
	public Customer() {

	}

	public Customer(String name, int age) {
		this.name = name;
		this.age = age;
	}

	private long id;
	private String name;
	private int age;

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}


分享到:
评论

相关推荐

    使用java反射机制实现java的深拷贝

    总结来说,Java反射机制为我们提供了动态访问和操作类的能力,可以用来实现对象的深拷贝。然而,反射使用时应谨慎,因为它可能导致性能下降,且容易引入安全隐患。在设计类时,优先考虑使用序列化、克隆或自定义拷贝...

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

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。通过反射,开发者可以在程序执行时发现并访问类的字段(fields)、方法(methods)以及构造器(constructors),...

    利用Java反射机制实现对象相同字段的复制操作

    Java反射机制是Java语言中一个强大的工具,可以实现对象相同字段的复制操作。下面是对该机制的详细介绍和分析。 一、为什么需要对象相同字段的复制操作? 在项目开发中,我们经常需要在不同的对象之间复制值,这是...

    JAVA反射机制详解

    Java反射机制是Java语言提供的一种基础功能,通过反射...总的来说,Java反射机制为Java程序提供了高度的灵活性和动态性,在需要动态创建类实例、访问或修改对象属性以及调用方法的场合,反射机制是一个非常有力的工具。

    基于java8新特性+反射机制实现list不同实体类互转.zip

    这个压缩包文件“基于java8新特性+反射机制实现list不同实体类互转.zip”提供了一种解决方案,它利用了Java 8的新特性和反射机制来实现这种转换,并将这个功能封装为一个工具类。 首先,Java 8引入了许多新特性,...

    java学习笔记(java 反射机制 流 内存管理)

    Java反射机制是Java语言的一个强大特性,允许程序在运行时检查类、接口、字段和方法的信息,并能动态地创建对象和调用方法。通过java.lang.Class和java.lang.reflect包中的类,我们可以获取类的结构信息,包括构造器...

    java的反射机制

    ##### 示例2:使用反射机制复制对象 下面的示例代码展示了如何使用反射机制复制一个简单的JavaBean对象: ```java import java.lang.reflect.Field; import java.lang.reflect.Constructor; public class ...

    java反射机制总结

    Java反射机制是Java语言的一个重要特性,它允许程序在运行时获取类的信息以及操作类的对象。这种能力使得Java程序能够实现动态性,即在编译期不知道具体类型的情况下仍然可以处理对象。反射机制的核心功能包括: 1....

    java反射机制与动态代理

    Java反射机制主要是通过以下几个核心类来实现的,这些类都位于`java.lang.reflect`包中: 1. **`Class`类**:表示一个类,是反射机制的基础。通过它可以获取类的各种信息,如类名、超类、接口、字段、方法等。 2. *...

    java类复制一个持久化对象

    通过上述代码,我们成功地利用Java反射机制复制了一个持久化对象。这种方法虽然简单有效,但在实际应用中也存在一定的局限性和挑战,比如不支持复制复杂的数据结构(如集合和数组)中的元素,也不考虑对象之间的引用...

    Java反射机制与动态代理

    Java反射机制是Java编程语言中的一种强大的工具,它允许程序在运行时检查和操作类、接口、对象等的内部信息。反射机制的核心在于能够在运行时动态地获取类的信息并进行操作,这为Java提供了高度的灵活性和动态性。 ...

    java反射机制文档

    Java 反射机制是 Java 语言提供的一种强大的工具,它允许程序在运行时检查和操作类、接口、对象等的内部细节。通过反射,我们可以在不知道具体类名的情况下,动态地获取类的信息,如类名、修饰符、父类、接口、字段...

Global site tag (gtag.js) - Google Analytics