利用反射操作对象的成员和方法

原创 2016年08月29日 17:03:20

之前写过的理论博客:http://blog.csdn.net/u010892841/article/details/51596392

一个Student对象

一个BeanUtil类用来完成利用反射操作Student对象的成员变量赋值和调用其setter方法。

StudentTest类是程序入口。

<span style="font-size:18px;">package reflect;


public class Student {
	private String name;
	
	private String hobby;

	public String getName() {
		return name;
	}

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

	public String getHobby() {
		return hobby;
	}

	public void setHobby(String hobby) {
		this.hobby = hobby;
	}

	public Student(String name, String hobby) {
		super();
		this.name = name;
		this.hobby = hobby;
	}

	public Student() {
		super();
	}
	
	
	
}
</span>

<span style="font-size:18px;">package reflect;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Date;
import java.util.Map;
import java.util.logging.Logger;

/*
 * @author:qiao pan ma 
 * @time:2016-8-29 16:08:38
 * @a util that can reflect the getter method of a class
 * */
public class BeanUtil {
	/*
	 * create a getter method according to the class name and the data that the getter method needs
	 * */
	public static Object getBean(Map<String, Object> data,String className) throws Exception{
		Class clz=Class.forName(className);
		Object bean=clz.newInstance();
		for(String key:data.keySet()){
			//acquire the name of setter()
			String setter=String.format("set%s%s", key.substring(0, 1).toUpperCase(),key.substring(1));
			//get the value of setter()
			Object value=data.get(key);
			
			/*get the Method Object according to the method name 
			 * and the type of parameters(can get from the Object.getClass)
			*/
			try {
				Method method=clz.getMethod(setter, value.getClass());
				//the condition is that method must be public
				if(Modifier.isPublic(method.getModifiers())){
					method.invoke(bean, value);
				}
			} catch (NoSuchMethodException e) {
				Logger.getLogger(BeanUtil.class.getName()).warning(String.format("没有   %s 方法", setter));
			}
		}
		return bean;
		
	}
}
</span>

<span style="font-size:18px;">package reflect;

import java.util.HashMap;
import java.util.Map;

import org.junit.experimental.theories.Theories;

public class TestStudent {
	public static void main(String[] args) throws Exception {
		Map<String, Object> data=new HashMap<String, Object>();
		data.put("name", "Qiao");
		data.put("hobby", "travelling");
		
		Student student=(Student)BeanUtil.getBean(data, "reflect.Student");
		
		System.out.println("the hobby of "+student.getName()+" is "+student.getHobby());
		//System.out.printf("(%s, %d)%n", student.getName(),student.getHobby());
	}
}
</span>
执行的结果是    the hobby of Qiao is travelling

版权声明:本文为博主原创文章,若要转载请注明出处!^_^

Java笔记——利用反射机制获取成员变量及成员方法

package tmp; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; im...
  • pat_datamine
  • pat_datamine
  • 2015年01月09日 14:19
  • 1465

Java笔记:[反射篇] 利用反射,获取类中的私有内部类对象,并调用该对象的方法

有时候,你会想使用Android自带的某个控件,但发现某些参数需要重新设置,但是并没有暴露出来修改的入口。 这时反射就可以帮上你的忙了~ 我们以RecyclerView为例,看看反射的使用方法。...
  • bailichun19901111
  • bailichun19901111
  • 2016年03月09日 18:48
  • 3044

java反射,获取类对象所有成员变量,从字符串调用函数

java反射,获取类对象所有成员变量,从字符串调用函数
  • scimence
  • scimence
  • 2015年06月19日 09:32
  • 9439

反射机制调用类的方法,或操作成员,以及反射中的数组对象

使用反射机制可以去除类的方法的对象代表,则是一个java.lang.reflect.Method的实例。   如有一个实体类: public class Student { private St...
  • huangjing_whlg
  • huangjing_whlg
  • 2013年11月05日 20:01
  • 731

Java反射机制,通过对象访问调用类的私有成员或方法

  • 2017年05月28日 20:45
  • 7KB
  • 下载

黑马程序员--Java基础加强--16.利用反射操作泛型V【通过Constructor反射解析泛型构造方法】【通过Field反射解析泛型成员变量】【个人总结】

利用反射操作泛型IV 通过Constructor反射解析泛型构造方法 通过Field反射解析泛型成员变量 ----------- android培训、java培训、java学习型技术博客、期待与您交流...
  • u011406124
  • u011406124
  • 2013年08月10日 10:10
  • 1582

Java反射机制,通过对象访问调用类的私有成员属性或者方法

Class是对类的抽象(每个类对应一份字节码)。一般情况下,比如A a = new A();直接通过a对象调用方法即可。但是在有些场景下,这样是做不到的,比如类名A是通过参数传递过来的,这时候你就无法...
  • D_inosaur
  • D_inosaur
  • 2017年05月28日 20:59
  • 283

Java反射---Class对象,获得类的方法、成员变量和构造函数信息

Class类任何一个类都是Class类的实例,而我们常见的对象,是用普通的类实例化出来的,也就是Class类的实例的实例。一个普通的类Foo的Class实例有三种表示方式: - 1、知道类名获取Fo...
  • twilight_karl
  • twilight_karl
  • 2017年06月28日 15:47
  • 203

通过反射操作类方法,类的成员变量

开发工具:Android Studio 首先建一个基础类,我们用来操作的类:如下package com.example;public class Person { private Strin...
  • qq_33517844
  • qq_33517844
  • 2017年05月04日 20:33
  • 112

PHP clone关键字克隆实例化对象,调用类中的成员方法

  • 2014年01月17日 12:36
  • 21KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用反射操作对象的成员和方法
举报原因:
原因补充:

(最多只允许输入30个字)