关于反射类型的判断

  今天写代码的时候需要做一下类型判断,对于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}是不行的

[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,每个基本类型和对应的包装类型都有这个关系

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

boolean 是基本数据类型 改用Boolean就为true了

Class.isInstance(Object),参数是Object,
根据lz的情况,传如的是boolean型会被强制转换成Boolean型,
所以返回的是false。

java的基本数据类型和对象是不一样的吧

用Boolean.TYPE