2012-12-01から1ヶ月間の記事一覧
概要 今日は、ジェネリックな数値キャストをします。 やりたいこと プリミティブ型の数値キャスト(プリミティブ拡大変換、縮小変換)と呼ばれる演算があります。 たとえば、double型をshort型に変換する場合 short s = (short)3.0;これをジェネリックにするに…
動機 プリミティブ型の式(たとえば数値リテラル)はオブジェクトではないので、メソッドを呼び出すことはできません。 // コンパイルエラー 100.intValue(); そこで簡単な式でボクシング変換を起こす方法をいくつか紹介します。 たとえばメソッドチェイン中で…
概要 今日は、ラッパー型のClassオブジェクトとプリミティブ型のClassオブジェクトを相互に変換してみます。 ラッパー→プリミティブ staticフィールドであるInteger.TYPE はint.classを返します。 他のラッパークラスにも同名のフィールドがあるので、リフレ…
概要 Classオブジェクト(特にプリミティブ型)から、変数のデフォルト値を取得する。 前提 static変数、インスタンス変数、配列の要素はデフォルト値で初期化されます。 Each class variable, instance variable, or array component is initialized with a d…
概要 finallyのネストをフラットにする。 動機 以下の理由で、finallyの中でtry-catch-finallyを書かなくてはならないことがあります。 finally ブロックの中で呼び出されるメソッドは例外をスローすることがある。そのような例外をキャッチして処理しないと…
変数に値を代入する際に、アンボクシング→プリミティブ拡大変換は起こる*1が プリミティブ拡大変換→ボクシングは起こらないので、 intはLongになるがIntegerはlongにならない。 @SuppressWarnings("unused") public static void main(final String[] args) {…