A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙飞 中级黑马   /  2012-8-9 00:39  /  1404 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙飞 于 2012-8-9 00:43 编辑
  1. import java.lang.reflect.InvocationTargetException;
  2. import java.lang.reflect.Method;
  3. import java.util.ArrayList;

  4. public class GenericTest {
  5.          public static void main(String[] args){
  6.                   ArrayList<Integer> collection=new ArrayList<Integer>();
  7.                   collection.add(3);
  8.                   //collection.add("hello");
  9.                   Method method=null;
  10.                  try {
  11.                               method=collection.getClass().getMethod("add", Object.class);//为什么这里把Object.class改成String.class就不能把字符串加入集合呢?我下面要传入的是字符串,为什么这里不能用它的字节码文件类型做参数
  12.                  } catch (SecurityException e) {                                                            
  13.                               e.printStackTrace();
  14.                 } catch (NoSuchMethodException e) {
  15.                               e.printStackTrace();
  16.                 }
  17.                try {
  18.                             method.invoke(collection, "hello");
  19.                } catch (IllegalArgumentException e) {
  20.                            e.printStackTrace();
  21.                } catch (IllegalAccessException e) {
  22.                            e.printStackTrace();
  23.                } catch (InvocationTargetException e) {
  24.                            e.printStackTrace();
  25.               }
  26.               System.out.println(collection);

  27.     }
  28. }
复制代码

4 个回复

倒序浏览
你拿到collection的字节码的时候,就已经是规定了泛型是Integer的了,而你非要传个String.class进去的话,编译是不通过的,因为泛型会在编译的时候自动帮你检查类型
回复 使用道具 举报
本帖最后由 尹善波 于 2012-8-10 17:41 编辑

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
public class GenericTest {
         public static void main(String[] args){
                  ArrayList<Integer> collection=new ArrayList<Integer>();
                  collection.add(3);
                  //collection.add("hello");
                  Method method=null;
                 try {

                              method=collection.getClass().getMethod("add", Object.class);//获得字节码对象后可以用它的getMethod方
                                                                                                                // 法去获得该字节码对象所在类的一个公共的成员方法,但getMethod方法要传入的参数是
                                                                                                           //方法名字和该方法本身应该传入的参数,集合的add方法本身传入的参数是一个泛型,说明可以接收任
                                                                                                               //意类型的参数, 所以应该传入Object的字节码文件类型做为参数才行

                 } catch (SecurityException e) {                                                            
                              e.printStackTrace();
                } catch (NoSuchMethodException e) {
                              e.printStackTrace();
                }
               try {
                            method.invoke(collection, "hello");
               } catch (IllegalArgumentException e) {
                           e.printStackTrace();
               } catch (IllegalAccessException e) {
                           e.printStackTrace();

               } catch (InvocationTargetException e) {
                           e.printStackTrace();
              }
              System.out.println(collection);
    }

}
//刚刚改好 希望能有用到

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

回复 使用道具 举报
没办法啊,哎
回复 使用道具 举报
加个油啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马