- 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();
- }
- }
-
- }
复制代码
|
|