isAssignableFrom with reference和primitive类型

Mar*_*itt 13 java generics types

我想更好地理解原始和引用类型之间的Java中的isAssignableFrom行为.

例如:

System.out.println(boolean.class.isAssignableFrom(Boolean.class)); // false
System.out.println(Boolean.class.isAssignableFrom(boolean.class)); // false

boolean primitive;
Boolean referenceType = true;
primitive = referenceType;
System.out.println(primitive); // true
Run Code Online (Sandbox Code Playgroud)

我知道在分配原语< - >时会引用装箱/取消装箱根据需要发生,但我认为因此isAssignableFrom会在上面的前两个例子中返回true.

有人可以解释为什么它返回false,这里适当的测试是什么?

Jon*_*eet 14

你不能真正一个分配boolean值的Boolean变量-但你可以转换booleanBoolean使用的自动装箱.

JavaDoc中制定规则很清楚:

确定此Class对象表示的类或接口是否与指定的Class参数表示的类或接口相同,或者是它们的超类或超接口.如果是这样,它返回true; 否则返回false.如果此Class对象表示基本类型,则如果指定的Class参数恰好是此Class对象,则此方法返回true;否则返回true.否则返回false.


Yis*_*hai 7

1.4javadocs已经指定:

如果此Class对象表示基本类型,则如果指定的Class参数恰好是此Class对象,则此方法返回true;否则返回true.否则返回false.

因此,在引入自动装箱之前,此方法的行为已锁定,并且无法更改(必须引入新方法).

鉴于此错误报告,很明显并非所有围绕Class对象的边缘情况以及自动装箱如何更改期望都已完全处理.

为了回答你问题的第二部分,我知道测试这个案例的唯一方法是一系列if语句或一些类似的解析机制来"封装"基本类类型.