java 中反射的应用

java 中反射的应用:

 

1,获取指定类的所有成员变量,包括父类的成员变量:

/***
	 * get all field ,including fields in father/super class
	 *
	 * @param clazz
	 * @return
	 */
	public static List<Field> getAllFields(Class clazz) {
		List<Field> fieldsList = new ArrayList<Field>();// return object
		if (clazz == null) {
			return null;
		}

		Class superClass = clazz.getSuperclass();// father class
		if (superClass.getName().equals(Object.class.getName()))/*
																 * java.lang.Object
																 */{
			// System.out.println("no father");
		} else {
			// System.out.println("has father");
			fieldsList.addAll(getAllFields(superClass));// Recursive
		}

		Field[] fields = clazz.getDeclaredFields();
		for (int i = 0; i < fields.length; i++) {
			Field field = fields[i];
			fieldsList.add(field);
		}

		return fieldsList;
	}

2,设置指定属性(私有成员变量)的值

/***
	 *
	 * @param obj
	 * @param propertyName
	 *            : property name
	 * @param propertyValue
	 *            : value of property
	 * @throws SecurityException
	 * @throws NoSuchFieldException
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 */
	public static void setObjectValue(Object obj, String propertyName,
			String propertyValue) throws SecurityException,
			NoSuchFieldException, IllegalArgumentException,
			IllegalAccessException {
		if (StringUtils.isEmpty(propertyName)
				|| StringUtils.isEmpty(propertyValue)) {
			return;
		}
		Class<?> clazz = obj.getClass();
		Field name = clazz.getDeclaredField(propertyName);
		name.setAccessible(true);
		name.set(obj, propertyValue);

	}

3,获取指定属性(私有成员变量)的值

/***
	 *
	 * @param obj
	 * @param propertyName  :name of property
	 * @return
	 * @throws SecurityException
	 * @throws NoSuchFieldException
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 */
	public static Object getObjectValue(Object obj, String propertyName)
			throws SecurityException, NoSuchFieldException,
			IllegalArgumentException, IllegalAccessException {
		if (StringUtils.isEmpty(propertyName)) {
			return null;
		}
		Class<?> clazz = obj.getClass();
		Field name = clazz.getDeclaredField(propertyName);
		name.setAccessible(true);
		return name.get(obj);
	}

说明:依赖的jar:commons-lang-2.6.jar

时间: 2024-12-03 17:20:43

java 中反射的应用的相关文章

Java中反射的一个简单使用_java

简介 首先介绍一些不太实用的解释:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. 简单使用 反射,在java中是非常常见和好用的一种方式,(但是大家需要知道,他的效率是比较低的,所以要慎用)当然在基于java语言而产生的Android中也是可以使用的,我们可以使用反射来获取一些系统并不开放,但是存在的类,从而调用他的一些方法,下面就简单的写一下

基于java中反射的总结分析_java

刚开始学习java的时候真的很难理解反射到底是个什么东西 一些书籍,哪怕是很经典的书籍都解释的让人感觉懵懵的,或许的确是我太笨 况且,网上说在将来学习框架的时候需要经常应用到反射机制,这样一来总让人心里有些不安 就方才偶然又把讲解反射的章节和视频看了一点,觉得能理解一些了 现在决定一鼓作气,边看边写,顺便把一些主要的内容和操作都记载到这里 我想,对于我这么一个笨笨的人来说,学习的最好方法也许就是不断重复 遇到不懂的知识就停下来把以往的重新学一遍,虽然浪费了很多时间,但对我也有些效果   我的理解

Java中反射获取私有构造函数、属性、方法

在学习Spring框架基础 Bean包时,写了一个简单的例子,类似如下: package study.spring.bean; public class SimpleBean { private String beanName; private SimpleBean() { System.out.println( " SimpleBean " ); } /** */ /** * @return Returns the beanName. */ public String getBean

Java中反射性能测试

Java反射效率到底如何,花了点时间,做了一个简单的测试.供大家参考. 测试背景:  1. 测试简单Bean(int,Integer,String)的set方法 2. loop 1亿次 3. 测试代码尽可能避免对象的创建,复发方法的调用,仅仅测试set方法的耗时 测试结果:  场景  本机测试结果(XP,双核,2G) 服务器测试结果(Linux,XEN虚拟机,8核,5.5G) 方法直接调用 235MS 190MS JDK Method调用 29188MS 4633MS JDK Method调用(

java中反射,枚举实际应用例子

遇到的问题 一个List<Object>的列表.. 列表中有枚举类型 枚举类型在页面显示的 时候就不能通过.属性来取数据 用反射 根据名字去匹配对应的类名 从而获取对应的属性值(反射) jsp页面 <%@taglib uri="/WEB-INF/tld/MethodUtil.tld" prefix="methodUtil"%> <td> <methodUtil:value className="xxxUtil&qu

java中反射机制通过字节码文件对象获取字段和函数的方法

pclass = Class.forName("get_class_method.Person"); //Field ageField = pclass.getField("age");//因为age成员变量是私有的,所以会产生NoSuchFieldException异常 Field ageField = pclass.getDeclaredField("age");//获得该对象反映此 Class 对象所表示的类或接口的指定已声明字段 Obje

浅析Java中的反射机制原理

       反射反射,程序员的快乐!        Java中反射机制使用的还是比较广泛的,系统的灵活性.可扩展性大都都是通过反射等方式来加载外部插件,使得系统与插件解耦的同时,增加了功能.但是很多人都只是会用,却是不知道它的实现机制,今天就由我来带大家揭开反射机制的神秘面纱.        Java中是用Class.forName(classname)来反射类. package com.java.reflecttest; import com.java.dbtest.DBTest; /**

Java中的类反射机制

一.反射的概念 :反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩.其中LEAD/LEAD++ .OpenC++ .MetaXa和OpenJava等就是基于反射机制的语言.最近,反射机制也被应用到了视窗系统.操作系统和文件系统中. 反射本身并不是一个新概念,它可能会使我们联想到光学中的反射概念,尽管计算机科学

Java中的反射机制

反射,reflection,听其名就像照镜子一样,可以看见自己也可以看见别人的每一部分.在java语言中这 是一个很重要的特性.下面是来自sun公司官网关于反射的介绍: Reflection is a feature in the Java programming language. It allows an executing Java program to examine or "introspect" upon itself, and manipulate internal pr