`
lijunaccp
  • 浏览: 158894 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

反射案例

阅读更多
案例一:
1. Test.java
package com.test;

public class Test {
	private String name="hello";
	
	public String getName(){
		return name;
	}
}

2. TestMain.java
package com.test;

import java.lang.reflect.Field;

public class TestMain {
     public static void main(String[] args) throws Exception {
		Test test=new Test();
		
		Class clz=Test.class;
		
		Field field=clz.getDeclaredField("name");
		
		field.setAccessible(true);
		
		field.set(test, "world");
		
		System.out.println(test.getName());
	}
}

案例二:
模仿框架中底层原理
1. ReflectTester.java
package com.test.reflection;

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

public class ReflectTester
{
	public Object copy(Object object) throws Exception
	{
		// 获得对象的类型
		Class classType = object.getClass();
		System.out.println("Class:" + classType.getName());

		// 通过默认构造方法创建一个新的对象
		Object objectCopy = classType.getConstructor(new Class[] {})
				.newInstance(new Object[] {});

		// 获得对象的所有属性
		Field fields[] = classType.getDeclaredFields();

		for (int i = 0; i < fields.length; i++)
		{
			Field field = fields[i];

			String fieldName = field.getName();
			String firstLetter = fieldName.substring(0, 1).toUpperCase();
			// 获得和属性对应的getXXX()方法的名字
			String getMethodName = "get" + firstLetter + fieldName.substring(1);
			// 获得和属性对应的setXXX()方法的名字
			String setMethodName = "set" + firstLetter + fieldName.substring(1);

			// 获得和属性对应的getXXX()方法
			Method getMethod = classType.getMethod(getMethodName,
					new Class[] {});
			// 获得和属性对应的setXXX()方法
			Method setMethod = classType.getMethod(setMethodName,
					new Class[] { field.getType() });

			// 调用原对象的getXXX()方法
			Object value = getMethod.invoke(object, new Object[] {});
			System.out.println(fieldName + ":" + value);
			// 调用拷贝对象的setXXX()方法
			setMethod.invoke(objectCopy, new Object[] { value });
		}
		return objectCopy;
	}

	public static void main(String[] args) throws Exception
	{
		Customer customer = new Customer("Tom", 21);
		customer.setId(new Long(1));

		Customer customerCopy = (Customer) new ReflectTester().copy(customer);
		System.out.println("Copy information:" + customerCopy.getId() + " "
				+ customerCopy.getName() + " " + customerCopy.getAge());
	}
}

class Customer
{
	private Long id;

	private String name;

	private int age;

	public Customer()
	{
	}

	public Customer(String name, int age)
	{
		this.name = name;
		this.age = 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反射机制,提高代码的灵活性和可扩展性。参考链接提供的文章详细讲解了相关API的使用,是一个不错的学习资源。

    JAVA简单的反射案例

    在本篇文章中,我们将探讨Java反射的基本概念、如何使用以及其在实际开发中的应用,结合“JAVA简单的反射案例”这一主题。 1. **什么是Java反射**: Java反射机制允许我们在运行时动态地获取类的信息(如类名、...

    反射案例-仅供查考

    这个“反射案例-仅供查考”可能包含了一系列关于如何使用反射进行实际操作的例子。 1. **反射的基本概念** - 类的Class对象:每个类在Java中都有一个对应的Class对象,它包含了该类的所有信息,如类名、方法、属性...

    .net反射案例

    这个".NET反射案例"压缩包显然包含了一个视频教程——"shangwu1-反射1.avi",它可能详细讲解了如何在实践中应用反射。 反射的核心概念在于它能够动态地获取类型信息,包括类、接口、枚举、委托等。通过System....

    Java反射经典实例

    Java反射是Java编程语言中的一个强大特性,它允许运行时的程序访问并操作类、接口、字段和方法等信息,即使这些信息在编译时并未明确知晓。在Java中,反射通常通过`java.lang.Class`类和相关的API来实现。本实例将...

    c# 反射应用几乎最全面的实例

    在C#编程语言中,反射是一项强大的特性,它允许运行时检查类型信息并动态操作对象。这个"c# 反射应用几乎最全面的实例"集合可能是为了展示反射的各种应用场景和用法。以下是对C#反射及其应用的详细解释。 反射的...

    java反射机制案例及源码

    Java反射机制是Java语言的一个重要特性,它允许程序在运行时动态地获取类的信息并调用其方法。在Java中,反射机制的核心类是`java.lang.Class`,它代表了运行时的类信息。通过反射,我们可以实现一些高级功能,如...

    Java反射机制经典案例

    6. **案例分析**: 假设有一个`Person`类,包含`getName()`和`setName(String name)`方法。我们可以不直接创建`Person`对象,而是使用反射动态调用这些方法。首先,获取`Person`的`Class`对象,然后通过`...

    c# 反射实例

    //c# 反射实例 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace ConsoleApplication1 { class Program { static void Main( string...

    c# 反射例子 reflector

    "反射案例"这个文件可能包含了具体的代码示例,演示了如何在C#中使用反射。这些示例可能包括: 1. **获取类型信息**:展示如何获取类型的基本信息,如名称、全名、是否为抽象类等。 2. **动态实例化**:创建未知...

    java反射小例子

    描述中的“简单反射案例”可能包含了上述部分或全部内容,演示了如何在运行时通过类名动态获取类信息,创建对象,访问和修改私有成员,以及调用方法。压缩包中的“test”文件可能是包含这个小例子的源代码文件,可以...

    C#反射+委托案例 c#经典案例.pdf

    C#反射+委托案例 C#反射是指在运行时动态地获取类型信息和调用类型成员的能力。反射的定义是审查元数据并收集关于它的类型信息的能力。元数据是编译以后最基本的数据单元,它是一个大堆的表,当编译程序集或者模块...

    dwr与反射相结合案例

    在这个“dwr与反射相结合”的案例中,我们将深入探讨如何利用DWR的灵活性和Java反射机制来增强Web应用的功能。 DWR的核心功能是提供一种安全、高效的方式,使得JavaScript可以调用服务器上的Java方法,就像是本地...

    反射工厂的案例(DAO底层框架)

    结合这两个概念,"反射工厂"的案例可能是在创建对象时,使用工厂模式的逻辑,但在确定要创建哪个类的对象时,不预先硬编码类名,而是通过反射机制获取。例如,假设我们有一个数据库访问对象的接口DAO,有多个不同的...

    java反射机制学习笔记+反射机制实操案例

    通过这个案例,我们可以看到反射机制如何使代码更加通用,可以处理任意实现了相应getter方法的对象,而不仅仅是预先知道的特定类型。 3. 反射与JVM的自省机制: 反射机制是Java虚拟机(JVM)的自省能力体现,它...

    完美版课件资料第三节 神经调节的基本方式97077.ppt

    再来看"望梅止渴"的例子,这是一个经典的复杂反射案例。吃梅止渴是基本的非条件反射,因为人们在吃到酸梅时会立刻分泌唾液,这是与生俱来的反应。而谈梅止渴、看梅止渴则涉及到更高级的认知过程,如记忆和联想,因此...

    精品课件资料神经调节的基本方式(第一课时).ppt

    8. **缩手反射案例分析**:当手接触到高温物体时,感受器感受到刺激,通过传入神经将信息传至脊髓的神经中枢,再由传出神经引导效应器(肌肉)收缩,使手迅速缩回,这一过程就是典型的反射活动。 综上所述,本课件...

    C#反射Refilection 案例详解

    本文将深入讲解C#反射的基本概念、用途以及实际案例。 首先,我们要理解什么是类型。在C#中,每个类、接口、结构、枚举等都是一个类型,它们在编译期间被转换为元数据,存储在程序集(Assembly)中。反射就是通过...

    光的反射教学案例.doc

    光的反射教学案例.doc

Global site tag (gtag.js) - Google Analytics