我刚刚尝试了以下内容:
System.out.println(int.class.cast(null));
这正是它在规范中所说的:
将对象强制转换为表示的类或接口 通过这个{@code Class}对象 @param obj要施放的对象
@tject在转换后返回对象,如果obj为null,则返回null @throws ClassCastException如果对象不是 null,不能分配给T类型。
虽然Class
是一些非原始类似乎是直观的 - 但是毕竟null可以转换为所有类 - 我想知道为什么对于诸如int
之类的原始类这样做了不会产生ClassCastException
。我的理由是
Foo f = (Foo) null; // Okay
int a = (int) null; // Not okay: "Cannot cast from null to int"
// why doesn't Class#cast reflect this?
答案 0 :(得分:3)
int.class
的类型为Class<Integer>
,因此相当于投射到Integer
,参见Class Literals:
p.class
的类型,其中p
是基本类型的名称(第4.2节),是Class<B>
,其中B
是表达式的类型在装箱转换后输入p
(第5.1.7节)。