学习Java(80)_利用反射调用成员方法

在前面几篇博文中可以知道,一个类有无参的构造方法,所以实例化对象的时候可以直接利用 Class 类中提供的 newInstance()方法。
在 Class 类里面提供有以下取得类中 Method 的操作:
取得全部方法:public Method[] getMethods() throws SecurityException
取得指定方法:public Method getMethod(String name,Class<?>... parameterTypes)
throws NoSuchMethodException, SecurityException
以上两个操作返回的是 java.lang.reflect.Method 类的对象
调用方法:
public Object invoke(Object obj,Object... args)  throws IllegalAccessException,
IllegalArgumentException, InvocationTargetException
范例:
/*
	测试目的:
		通过反射调用类中的方法
*/
import java.lang.reflect.Method;
class Book
{
	private String name;
	
	public void setName( String name )
	{
		this.name = name;
	}
	
	public String getName()
	{
		return name;
	}
}
class TestMethod
{
	public static void main( String[] args ) throws Exception
	{
		String name = "name";
		Class<?> cls = Class.forName( "Book" );
		Object obj = cls.newInstance();
		//利用getMethod()方法,调用类中的成员方法
		Method setMet = cls.getMethod( "set"+initcap( name ), String.class );
		Method getMet = cls.getMethod( "get"+initcap( name ) );
		setMet.invoke( obj, "一本好书" );
		
		System.out.println( getMet.invoke( obj ) );
		
		
		
		//System.out.println( obj );
	}
	
	public static String initcap( String str )
	{
		return str.substring( 0, 1 ).toUpperCase() + str.substring( 1 );
	}
}
/*
	在JDK1.8.0_91中运行的结果是:
	============================
	E:\textjava>java TestMethod
	一本好书
	============================
	总结:
		通过Method类,进行类中方法的调用。
*/
利用反射可以实现任意类的指定方法的调用。


小艾的博客 http://www.aixinyan.me/