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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 创出一片辉煌 中级黑马   /  2012-8-4 12:44  /  1428 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

反射里的问题,例
Method  met = value.getMethod("GOGO",String.class,int.class) ;
public Method getMethod(String name,
                        Class<?>... parameterTypes)
                 throws NoSuchMethodException,
                        SecurityException

,老师说取得反射有  三种方法,其中一种是  类.class  里面,但是上面的程序,却是int.class  而不是Integer.class 为什么呢,我知道应该是Integer.TYPE = int.class

2 个回复

倒序浏览
1 不是说取得反射,而是说取得类字节码有3种方法:注意:是类
   得到字节码: 类名.class      对象.getClass()   Class.forName("类名")
   另外,取得基本类型的字节码
               Boolean.TYPE, Character.TYPE, Byte.TYPE, Short.TYPE, Integer.TYPE,
                Long.TYPE, Float.TYPE, Double.TYPE, Void.TYPE
                其中void比较特殊

2  你看一下下面的代码
                String str = "abc";
                Class c1 = str.getClass()//得到字节码;
                Class c2 =String.class;//得到字节码
                Class c3 =Class.forName("java.lang.String");//得到字节码
                c1==c2==c3
                System.out.println(c1.isPrimitive());//不是基本类型
                System.out.println(int.class.isPrimitive());//基本类型
                System.out.println(int.class==Integer.class);//两种不同类型的字节码
                System.out.println(int.class==Integer.TYPE);//同类型的字节码

   注意: int.class==Integer.TYPE  这里是true的
          int.class是基本类型的字节码  Integer.TYPE也是基本类型的字节码

   所以,你说的“ 。。。 而不是Integer.class 为什么呢”,可以说是int.class 也可以是Integer.class

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 赞一个!

查看全部评分

回复 使用道具 举报
Method  met = value.getMethod("GOGO",String.class,int.class)
因为met里需要的参数是(,String,int)所以使用int.class啊。Integer.class与int.class又不同,为什么要用 Integer.class。需要什么类型的参数就用什么类型的.class。至于你说的什么类.class这里是特殊情况,null.class都可以,null明显不是一个类但是它也有字节码的。基本数据类型也对应了其相应的字节码。  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马