私は次のことを試してみました:`int.class.cast(null)`が動作する理由は何ですか?
System.out.println(int.class.cast(null));
これは、それがその仕様に言うまさに行います
に割り当てられない場合は、この{@codeクラス}オブジェクトで を表すクラスまたはインタフェースにオブジェクトをキャスト。
鋳造後のオブジェクト@return
をキャストするオブジェクトOBJ @param、またはnull objがnull
@throwsのClassCastExceptionがある場合、オブジェクトがnull でなく、型T
Class
が非プリミティブなクラスの場合は直感的ですが、nullは結局すべてのクラスに変換可能です。int
などのプリミティブクラスの場合、ClassCastException
という結果にはならないのはなぜかと思います。それはInteger
、参照型へのキャストと同じですので、私の推論は、int.class
のタイプはClass<Integer>
ある
Foo f = (Foo) null; // Okay
int a = (int) null; // Not okay: "Cannot cast from null to int"
// why doesn't Class#cast reflect this?
*これは仕様書に記載されているとおりです*しかし、なぜ仕様書に記載されていないのでしょうか? –
私は最初に仕様書を読まずに試してみたので、尋ねられました、オフガードを捕まえて、それを読んで、それでもそれが不満であると感じました。私は、メソッドの使い方が設計上直感的でなければならないと思っていました。おそらく、私がJavaについて何かを学ぶことができない理由を逃したかもしれません。 – WorldSEnder
基本的にプリミティブ型*はオブジェクトではありません。その決定にはトレードオフがあり、これもその1つです。 –