今天写代码的时候需要做一下类型判断,对于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 Excel发现不可读取的内容
- ¥15 UE5#if WITH_EDITOR导致打包的功能不可用
- ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
- ¥20 yolov5自定义Prune报错,如何解决?
- ¥15 电磁场的matlab仿真
- ¥15 mars2d在vue3中的引入问题
- ¥50 h5唤醒支付宝并跳转至向小荷包转账界面
- ¥15 算法题:数的划分,用记忆化DFS做WA求调
- ¥15 chatglm-6b应用到django项目中,模型加载失败
- ¥15 CreateBitmapFromWicBitmap内存释放问题。