`

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

 

1
1
分享到:
评论

相关推荐

    Java反射应用实例

    代码主要实现了Java反射应用实例, 包含利用反射方法创建对象(使用默认构造函数和自定义构造函数),访问对应对象的方法(包括带参数的和不带参数的),访问对应对象的域(Field). 从这里可以看到代码的详细解说:...

    java反射应用详细介绍.rar

    java反射应用详细介绍.rar

    Java反射技术的一般应用

    在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...

    JAVA 反射机制应用

    JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用

    java反射应用的原理以及应用

    这个文档讲述了反射的原理,以及class的各方面的应用举一反三,全面深入的讲述了反射的机制以及巧妙应用

    Java反射简单应用

    几个小demo,介绍了反射的几个api操作,最后写了一个简单的Java反射应用:工厂+反射+配置文件。

    java反射应用实例

    NULL 博文链接:https://dragonmandance.iteye.com/blog/2336911

    java反射机制应用

    java反射机制应用,文档中列举了使用java反射机制的各个应用场景,加以代码实例,使用学习非常方便。

    JAVA反射机制应用

    描述JAVA反射机制应用、举例。描述反射机制的具体实现及方法实现。

    JAVA反射机制及应用例子

    JAVA反射机制及应用例子.。。Reflection API

    java反射应用详细介绍

    本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解。 下面开始正文。 【案例1】通过一个对象...

    java反射应用

    NULL 博文链接:https://x125858805.iteye.com/blog/2262979

    java反射机制详解与应用

    java反射机制详解与应用

    Java反射学习和反射的应用场景干货都在这里

    文章目录一、Java反射定义二、Java反射机制实现1、Class对象获取2、获取class对象的摘要信息3、获取class对象的属性、方法、构造函数等三、反射的应用场景1、动态代理2、自定义注解实现日志管理 写在前面:Java反射...

    java的反射机制及其实际应用

    Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接。反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源...

    Java反射机制经典案例

    Java反射机制经典案例

    Java方法反射调用demo

    Java反射 调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用基本类型数组参数的方法 调用String数组参数的方法 调用Object数组参数的方法 调用私有方法

    java反射技术源码

    java反射技术应用的很广泛,多看源码,对理解java反射的理解会有很好的认识,这个源码有我自己的理解在里边

    Java反射性能测试分析

    对在Java环境下应用反射的性能,做了测试分析

Global site tag (gtag.js) - Google Analytics