`

使用反射获取和设置对象的值

    博客分类:
  • Java
阅读更多

使用java如何获取对象的私有成员变量的值呢?

有一个bean:

public class Student2 {
	/***
	 * 学号
	 */
	private String schoolNumber;
	private String classroom;

	

	public void setSchoolNumber(String schoolNumber) {
		this.schoolNumber = schoolNumber;
	}

	public String getClassroom() {
		return classroom;
	}

	public void setClassroom(String classroom) {
		this.classroom = classroom;
	}

}

 测试:

@Test
	public void test_getObjectValue() throws SecurityException,
			IllegalArgumentException, NoSuchFieldException,
			IllegalAccessException {
		Student2 p = new Student2();
		p.setPersonName("哥斯拉");
		System.out.println(ReflectHWUtils.getObjectValue(p, "personName"));
	}

运行结果:哥斯拉 

 

getObjectValue的实现:

/***
	 * 获取指定对象的属性值
	 * 
	 * @param obj
	 * @param name
	 *            :Field
	 * @return
	 * @throws SecurityException
	 * @throws NoSuchFieldException
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 */
	public static Object getObjectValue(Object obj, Field name)
			throws SecurityException, NoSuchFieldException,
			IllegalArgumentException, IllegalAccessException {

		// Field f = getSpecifiedField(obj.getClass(), name.getName());
		if (name == null) {
			System.out.println("[ReflectHWUtils.getObjectValue]"
					+ obj.getClass().getName() + " does not has field " + name);
			return null;
		}
		name.setAccessible(true);
		return name.get(obj);
	}

	/***
	 * 获取指定对象的属性值
	 * 
	 * @param obj
	 * @param propertyName
	 * @return
	 * @throws SecurityException
	 * @throws NoSuchFieldException
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 */
	public static Object getObjectValue(Object obj, String propertyName)
			throws SecurityException, NoSuchFieldException,
			IllegalArgumentException, IllegalAccessException {
		if (ValueWidget.isNullOrEmpty(propertyName)) {
			return null;
		}
		Class<?> clazz = obj.getClass();
		Field name = getSpecifiedField(clazz, propertyName);
		if (ValueWidget.isNullOrEmpty(name)) {
			propertyName=ValueWidget.title(propertyName);//convert "Key2" to "key2"
			name = getSpecifiedField(clazz, propertyName);
			
			if (ValueWidget.isNullOrEmpty(name)) {
				System.out.println("[ReflectHWUtils.getObjectValue]"
						+ obj.getClass().getName() + " does not has field "
						+ propertyName);
			return null;
			}
		}
		return getObjectValue(obj, name);
	}

 

 

 

 

使用反射设置对象的值

 

@Test
	public void test_setObjectValue() throws SecurityException,
			IllegalArgumentException, NoSuchFieldException,
			IllegalAccessException {
		Student2 p = new Student2();
		ReflectHWUtils.setObjectValue(p, "classroom", "三六班");
		System.out.println(p.getClassroom());
	}

 运行结果:

 

三六班

setObjectValue 的实现:

 

/***
	 * 设置对象的属性值。
	 * 
	 * @param obj
	 * @param propertyName
	 *            : property name
	 * @param propertyValue
	 *            : value of property<br> must be String or Field
	 * @throws SecurityException
	 * @throws NoSuchFieldException
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 */
	public static void setObjectValue(Object obj, Object propertyName,
			Object propertyValue) throws SecurityException,
			NoSuchFieldException, IllegalArgumentException,
			IllegalAccessException {
		if (ValueWidget.isNullOrEmpty(propertyName)
				|| ValueWidget.isNullOrEmpty (propertyValue)) {
			return;
		}
		Class<?> clazz = obj.getClass();
		Field name = null;
		if(propertyName instanceof String){
		name=getSpecifiedField(clazz, (String)propertyName);
		}else{
			name=(Field)propertyName;
		}
		name.setAccessible(true);
		name.set(obj, propertyValue);

	}

 测试类:io0007-find_progess\src\test\java\com\test\UnitTest.java

 

源代码见附件:io0007-find_progess.zip

更多源代码下载:http://pan.baidu.com/s/1kTA7vOr

3
4
分享到:
评论
1 楼 wwwcomy 2014-11-12  
commons-beanutils.jar

org.apache.commons.beanutils.BeanUtils 有这个轮子了

相关推荐

    java反射,获取所有属性、方法以及List集合类

    这些`Field`对象提供了设置和获取字段值的能力,通过`set()`和`get()`方法。 ```java Class&lt;?&gt; clazz = Class.forName("com.example.YourClass"); Field[] fields = clazz.getDeclaredFields(); for (Field ...

    java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名

    这些代码可能包括创建枚举类,然后通过反射获取枚举值、实例名以及演示如何使用`getDeclaredConstructor()`和`newInstance()`方法来访问私有构造函数(虽然这不是常规用法)。 通过深入理解这些概念,你可以更好地...

    通过反射获得实体类的字段和值

    在深入探讨如何通过反射获取实体类的字段和值之前,我们先来理解一下反射是什么以及它在.NET框架中的作用。反射是一种强大的编程技术,允许运行时动态地获取类型的信息并操作对象。它提供了对程序集、模块、类型、...

    利用反射机制动态获取对象属性名称及数据类型

    本文将详细讲解如何利用反射机制动态获取对象的属性名称及其数据类型,以C#语言为例,结合ASP.NET环境进行阐述。 首先,我们需要创建一个实体类,例如`Student`,这个类包含了姓名(UserName)、年龄(Age)和地址...

    java 利用反射获取内部类静态成员变量的值操作.docx

    接下来,我们将通过一个具体的例子来演示如何使用Java反射获取内部类的静态成员变量的值。 ##### 示例代码分析 假设我们有如下的类结构: ```java public class Goods { static class Apple { // 内部类 public ...

    java 通过反射获取类上注解,方法上注解,注解里的值及方法参数

    在Java编程中,注解...这个示例涵盖了Java中使用反射获取注解的基本操作,包括类、方法、注解的值和方法参数。通过实践这个例子,你可以更好地理解和掌握这些概念,从而在实际项目中更有效地利用注解和反射。

    Java利用反射获取object的属性和值代码示例

    "Java利用反射获取object的属性和值代码示例" Java中的反射机制可以让我们在程序运行时动态地获取和修改对象的属性和值,这个技术非常有用,尤其是在一些框架和库的实现中。在这篇文章中,我们将通过一个实用的例子...

    java反射获取所有属性,获取所有get方法,包括子类父类

    在标题和描述中提到的知识点主要集中在如何通过反射获取类的所有属性和get方法,包括来自子类和父类的。下面将详细介绍这些内容。 1. **获取所有属性**: 在Java中,`java.lang.Class` 类提供了获取类属性的方法。...

    frida反射调用对象中的方法与字段.pdf

    本文主要讲解了在遇到需要操作Java对象的参数或返回值时,如何利用Frida这一动态代码插桩工具来进行反射调用,包括调用对象的方法和获取对象的字段。Frida是一个强大的动态代码插桩工具,它可以注入到几乎所有的进程...

    Java自定义注解使用反射获取字段注解

    这里,`@Retention(RetentionPolicy.RUNTIME)` 表示该注解会在运行时保留,以便于反射获取;`@Target(ElementType.FIELD)` 指定注解可以应用于字段。 接下来,我们可以创建一个类并使用自定义注解标记某个字段: `...

    C#通过属性名字符串获取、设置对象属性值操作示例

    C# 通过属性名字符串获取、设置对象属性值操作示例主要介绍了 C# 通过反射获取对象属性值并设置属性值、获取对象的所有属性名称及类型等相关操作技巧。下面是详细的知识点解释: 一、通过反射获取对象属性值 在 C#...

    反射获取属性调用方法反射获取属性调用方法

    - `TestReflect`可能是一个测试类,用于演示如何使用反射获取属性和调用方法。 以上就是反射获取属性和调用方法的基本概念、实现方式以及相关应用场景。掌握反射技术,能让你在编程中更加灵活,解决许多设计难题。

    运用反射得到类中的属性和值

    #### 二、反射获取类中的属性及值 下面,我们将通过具体的代码示例来展示如何使用反射来获取类中的所有属性及其对应的值。 ##### 1. 获取类的信息 首先,我们需要获取目标类的信息。这里使用`getClass()`方法来...

    完整版缓存CacheManagerDemo+通过反射获取对象

    在缓存管理中,反射机制可以用来动态地获取和操作对象,比如根据类名实例化对象,或者在缓存中查找或设置对象的属性。 4. **工厂设计模式**: 工厂设计模式是一种常用的创建型设计模式,它提供了一种创建对象的...

    C#设置和获取实例对象属性

    下面将详细介绍这三个概念以及如何使用它们来设置和获取实例对象的属性值。 **Emit** Emit是.NET Framework中的System.Reflection.Emit命名空间的一部分,它允许我们在运行时动态地创建类型、方法、属性等。Emit...

    用反射的方式获取父类中的所有属性和方法

    5. 动态调用方法和设置/获取属性值: 一旦我们有了`Method`或`Field`对象,就可以在运行时动态地调用方法或设置/获取属性值: ```java Object obj = ...; // 父类实例 method.invoke(obj, parameters); // 调用...

    Java 用反射设置对象的属性值实例详解

    在上面的代码中,我们首先获取对象的 Class 对象,然后根据属性名称获取设置属性值的方法,最后使用反射机制设置对象的属性值。 创建对象的方法 在 Java 中,有多种方式可以创建对象。下面我们将介绍两种常见的...

    利用java反射将json字符串转成对象.zip

    接着,我们判断字段的类型,并使用`set()`方法将值设置到对象的对应字段上。 这种方法的优点是可以动态地处理任何类结构的JSON数据,而无需提前知道具体类的信息。但同时,它也具有一定的风险,比如安全性问题...

    c# 反射调用对象成员 !

    `GetProperty()`用于获取属性信息,`GetValue()`和`SetValue()`用于读取和设置属性值。例如: ```csharp PropertyInfo prop = type.GetProperty("MyProperty"); object value = prop.GetValue(instance); prop....

Global site tag (gtag.js) - Google Analytics