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のネストをフラットにする。 動機 以下の理由で、finallyの中でtry-catch-finallyを書かなくてはならないことがあります。 finally ブロックの中で呼び出されるメソッドは例外をスローすることがある。そのような例外をキャッチして処理しないと…

アンボクシングのち拡大変換

変数に値を代入する際に、アンボクシング→プリミティブ拡大変換は起こる*1が プリミティブ拡大変換→ボクシングは起こらないので、 intはLongになるがIntegerはlongにならない。 @SuppressWarnings("unused") public static void main(final String[] args) {…