今天写代码的时候需要做一下类型判断,对于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}是不行的
关于反射类型的判断
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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,每个基本类型和对应的包装类型都有这个关系以上是我刚刚了解到的,不知道是否全面,但是这个的确是它们存在的一个理由
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥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()实现黑框里写入与删除?