zhaoqiangster 2009-01-07 15:40
浏览 259
已采纳

关于反射类型的判断

  今天写代码的时候需要做一下类型判断,对于String之类的都是没问题的,可是当判断boolean的时候就出了问题。google上搜索也没有找出结果来,希望有反射编程经验的人帮忙解决一下。代码部分如下

boolean aa = true;

Class cc = boolean.class;

if (cc.isInstance(aa)){//我认为这个时候应该为true,可是不是,为啥呢?

int a = 1;




}
问题补充
谢谢,好用了,不过还是有些疑惑,基本类型的class属性是用来做什么的?
问题补充:
不知道怎么会转到这里来,需要补充的是,如果我定义方法

  setBooL(boolean)

在反射中寻找方法  name为“setBooL”,参数的types数组应该怎么写?直接写{Boolean.class}是不行的

  • 写回答

5条回答 默认 最新

  • etank2011 2009-01-07 18:46
    关注

    [code="java"]
    System.out.println(int.class);
    System.out.println(Integer.class);
    System.out.println(boolean.class);
    System.out.println(Boolean.class);
    [/code]
    运行以上代码输出:
    [code="java"]
    int
    class java.lang.Integer
    boolean
    class java.lang.Boolean
    [/code]
    说明基本类型的class和包装类的不一样

    而使用
    [code="java"]
    Class.forName(boolean.class.getName());
    [/code]
    会抛出异常
    [code="java"]
    Exception in thread "main" java.lang.ClassNotFoundException: boolean
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    [/code]
    说明JAVA中不能根据基本数据类型的class来创建新的类(这个也是应该作到的)

    但是提供这个class属性的好处在于使用反射付值可以把基本类型和对象同等看待,例如从request中提取value然后通过javabean的set方法设置进去,如果是基本类型作为参数,如:setId(int id),同样可以通过Method类的getParameterTypes方法返回一个class对象,这样就可以统一基本类型和对象类型的方法接口了,如果没有这个class存在,不知道这个set方法的getParameterTypes要如何返回值了。

    注意这个等式
    [code="java"]
    boolean.class.equals(Boolean.TYPE) = true
    [/code]
    基本类型boolean与包装类Boolean的TYPE属性相等,这样就可以通过包装类的属性类获得相应的基本类型的class,每个基本类型和对应的包装类型都有这个关系

    以上是我刚刚了解到的,不知道是否全面,但是这个的确是它们存在的一个理由

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?