イディオム

ボクシングする方法あれこれ

動機 プリミティブ型の式(たとえば数値リテラル)はオブジェクトではないので、メソッドを呼び出すことはできません。 // コンパイルエラー 100.intValue(); そこで簡単な式でボクシング変換を起こす方法をいくつか紹介します。 たとえばメソッドチェイン中で…

クレイジーなfinallyをどうにかしたい

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

1文で2種類の例外をスローする

メソッドの引数を検査する時など、何種類かの例外を投げ分けたい場合があります。 これはなるべく短くしたいですね。そこで1文で書いてみましょう。 package test; public class Throw2Test { @SuppressWarnings("serial") static class HogeException exten…

キャストなしでスーパークラス型のthis参照を表す式

概要 super参照っぽいものを作ります。 前提 thisは参照を表す式として使えますが、superは参照を表す式として使えません。 // thisは参照 System.out.println(this); // コンパイルエラー。superは参照ではない // System.out.println(super); 隠蔽と式の型…

実行時例外スローを式に

Javaのthrow文は文なので、使い勝手が悪いことがあります。 そこで、式にしてみます。(検査例外は面倒なので実行時例外限定) やり方 実行時例外を引数にとり、それをスローするだけのpublic staticメソッドを用意します。 どの文脈でも使えるように戻り値型…

Scalaでflip+fold(L|R)

flip(2引数関数の引数を逆転させる高階関数)がすぐに見つからなかったので書いてみた。 foldLeft, foldRightで使えるのでは?と思って実験。 object Flip { def main(args : Array[String]) : Unit = { val list = List("恋しさ", "せつなさ", "心強さ") def…

インデックス付きforeachほか

概要 先日Javaで書いたインデックス付きforeachループ http://d.hatena.ne.jp/kya-zinc/20100107/1262856312 をScalaで書いてみた。 (なお、Scalaのfor-comprehensionはループ以外にも使える。) Iterableのデフォルト実装は便利。