代码改变世界

反射总结一

2012-03-01 13:35  党飞  阅读(269)  评论(0)    收藏  举报

---------------------- android培训java培训、期待与您交流! ----------------------

学了java反射机制,不得不总结一下:

下面通过一个小例子进行说明:

需求:定义一个存放Integer类型的ArrayList集合,怎样向集合中存入字符串、字符、Long类型、float类型、Double类型等非Integer类型数据。通过反射机制就可以解决这样的问题。

publicstaticvoid main(String[] args)throwsException{
  
  ArrayList<Integer> list =newArrayList<Integer>();
  
  list.add(12);//加入一个Integer类型数据
  list.add(34);
  
  //下面几种存入数据的方式是错误的
  /*list.add(3L);//Long类型
        list.add(3.4);//float
  list.add(12.34);//Double
  list.add('c');//char
  list.add("xyz");//String
   */
  
  //正确的做法可以通过反射机制存入一些非Integer类型数据
  list.getClass().getMethod("add",Object.class).invoke(list,"abc");//加入字符串
  list.getClass().getMethod("add",Object.class).invoke(list,'x');//存入字符
  list.getClass().getMethod("add",Object.class).invoke(list,2L);//存入Long类型数据
  list.getClass().getMethod("add",Object.class).invoke(list,4.5);//存入float类型数据
  list.getClass().getMethod("add",Object.class).invoke(list,3.50);//存入Double类型数据
  
  //方式一:通过迭代进行输出
  Iterator iter = list.iterator();
  while(iter.hasNext()){
    System.out.println(iter.next());
  }
  
  //方式二:通过遍历输出
  /*for(int x=0;x<list.size();x++){
   System.out.println(list.get(x));
  }*/
 }

}

打印结果:
12
34
abc
x
2
4.5
3.5
可以看出,通过反射机制能够将一些非Integer类型的数据存入ArrayList<Integer>集合中去。

---------------------- android培训java培训、期待与您交流! ----------------------