反射方法的调用与传参

方法的调用

创建一个实例,获取方法,调用方法。

package my;

import java.lang.reflect.Type;

import af.test.Example;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Test2
{
	public static void main(String[] args) throws Exception
	{
		//从example.jar中加载一个类,也可以自己传一个类去尝试,里面随便加个void类型的打印一句话就行了
		// void test1()
		Class cls = Class.forName("af.test.Example");
		//创建实例
		Object obj = cls.newInstance();
		
		//tes1没有参数
		Method testMethod = cls.getDeclaredMethod("test1");
		//调用这个方法,里面有一句打印		
		testMethod.invoke(obj);
		
		System.out.println("Exit......");
	}
}                                    

方法的传参

package my;

import java.lang.reflect.Type;

import af.test.Example;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Test2
{
	public static void main(String[] args) throws Exception
	{
		//从example.jar中加载一个类
		Class cls = Class.forName("af.test.Example");
		
		Object obj = cls.newInstance();
		
		//tes2传2个Integer  void test(int a, int b)
		Class[] in = { Integer.class, Integer.class}; 
		Method testMethod = cls.getDeclaredMethod("test2", in);
		//Method method = cls.getDeclaredMethod("test2", Integer.class, Integer.class);
		
		Object[] value = {30, 31};
		testMethod.invoke(obj, value);
		
		System.out.println("Exit......");
	}
}                                     

方法的返回值

先创建一个实例(newInstance),然后获取这个实例的某个方法(Method),最后调用这个方法(invoke)

package my;

import java.lang.reflect.Type;

import af.test.Example;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Test2
{
	public static void main(String[] args) throws Exception
	{
		//从example.jar中加载一个类
		Class cls = Class.forName("af.test.Example");
		
		//创建 一个实例
		Object obj = cls.newInstance();
		
		//test2有两个参数  void test2(double a, double b)
		Class[] argTypes = {double.class, double.class};
		Method testMethod = cls.getDeclaredMethod("test5", argTypes);
		
		//调用这个实例的方法
		Object[] argValues = {4.3 , 2}; // 会自动包装为两个double对象
		
		//在调用obj的testMethod的时候,传入参数 argValues
		Object result = testMethod.invoke(obj, argValues);
		
		//第一种方式:判断一个对象result
		if(result instanceof Double)
		{
			double ret = (double) result;
			System.out.println("结果为: " + ret);
		}
		
		//第二种方式:判断一个对象result 是否为某个类(或子类)的实例
		if(Double.class.isInstance(result))
		{
			double ret = (double) result;
			System.out.println("结果为: " + ret);
		}
		
		//第三种方式:比较一个类ccc和另一个是否相同(或是其子类)
		Class ccc = result.getClass();
		if(ccc.isAssignableFrom(Double.class))
		{
			double ret = (double) result;
			System.out.println("结果为: " + ret);
		}
		
		//第四种方式:比较一个类ccc和另一个类是否相同
		if(cls.equals(Double.class))
		{
			double ret = (double) result;
			System.out.println("结果为: " + ret);
		}
		
		
		System.out.println("Exit.");
	}

}
                                       
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值