黑马程序员技术交流社区
标题:
【技术问题】反射的使用
[打印本页]
作者:
蓝墨清幽
时间:
2015-4-22 11:01
标题:
【技术问题】反射的使用
package com.itheima;
import java.lang.reflect.Method;
import java.util.ArrayList;
public class Test11 {
/**
* 1. 题目:ArrayList<Integer> list = new ArrayList<Integer>();
* 在这个泛型为Integer的ArrayList中存放一个String类型的对象。 分析:
* 1.定义Integer泛型
* 2.取得list的所有方法
* 3.遍历打印list的方法
* 4.通过反射来执行list的第一个方法,第一个是list对象,代表该对象的方法,第二个是方法参数 步骤:
*/
public static void main(String[] args) {
//创建Arraylist
ArrayList<Integer> list = new ArrayList<Integer>();
/**获得list的类的字节码(Class)对象,并获得方法数组Mathod[ ]
* 获得Method的数组中的Method方法顺序与自己定义方法的顺序无关
* 数组中Method的顺序按照方法名首字母顺序排列
*/
Method[ ] methods = list.getClass().getMethods();
//遍历Method[ ]
System.out.println(methods.length);
for(int i=0; i<methods.length; i++){
System.out.println(methods[i].getName().toString());
}
try {
/**通过Method对象,调用Arraylist中的方法(即通过反射调用)
* 从Methods[ ]数组中取Method的方式不常用
*/
methods[0].invoke(list, "String");
/**直接调用某个确定的方法经常使用getMethod
*第一个参数 方法名称(String)
*第二个参数 方法的参数列表;如果参数有多个,有顺序,
*不用数组封装,继续用逗号,写下一个参数
**/
Method method = list.getClass().getMethod("get", int.class);
/**获取Method方法后,调用invoke方法进行调用
*第一个参数 所要调用这个Method方法的对象
*第二个及后续参数 给这个方法传递的参数
*返回值 为Object,可以强制转化
**/
Object obj = method.invoke(list, 0);
/**
* 输出
*/
System.out.println("结果="+obj.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
复制代码
作者:
itheima_llt
时间:
2015-4-22 14:13
高人啊,真是好东西啊!!
作者:
itheima_llt
时间:
2015-4-22 14:21
这个还不错,好帖子,大家谈谈
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2