是什么原因`int.class.cast(null)`有效?

时间:2016-04-14 16:20:03

标签: java casting

我刚刚尝试了以下内容:

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?

1 个答案:

答案 0 :(得分:3)

int.class的类型为Class<Integer>,因此相当于投射到Integer,参见Class Literals

  

p.class的类型,其中p是基本类型的名称(第4.2节),是Class<B>,其中B是表达式的类型在装箱转换后输入p(第5.1.7节)。