nullだったら例外を投げるちょっとだけ便利なメソッド

ひさびさにJavaでコードを書いてます。
で、コードを動かしてて実行時例外が投げられると悲しいですが、特にVMが投げるNullPointerException (NPE) はスタックトレースだけじゃ原因がよくわかんないことがあります。

<T> Class<? extends T> getClass(Class<T> type, String name) throws ... {
  // ここでNPEが投げられると、typeとnameのどっちが原因なのかがわからん。
  return Class.forName(name).asSubclass(type);
}

なのでVMに任せないで自分で調べるようにしてますが、これがまためんどくさい。

<T> Class<? extends T> getClass(Class<T> type, String name) throws ... {
  // nullだったら例外の詳細メッセージに変数名を入れておく。
  if(type == null) {
    throw new NullPointerException("type");
  }

  // でも何度も同じことを書くのはめんどくさい。
  if(name == null) {
    throw new NullPointerException("name");
  }

  return Class.forName(name).asSubclass(type);
}

ということで、nullだったら例外を投げる処理をメソッドにしてみました。
あ、J2SE 5.0以降、ってことで。

/**
 * <p>{@code null}ではないかを調べます。</p>
 *
 * @param name
 *   名前。例外を投げる場合、その詳細メッセージとなる
 * @param value
 *   {@code null}ではないかを調べる値
 * @return
 *   引数<code><var>value</var></code> ({@code != null})
 * @throws NullPointerException
 *   引数<code><var>value</var></code>に{@code null}を指定した場合
 *
 * @since J2SE 5.0
 */
public static <T> T notNull(String name, T value) {
  if(value != null) {
    return value;
  }

  // value == null だったら NullPointerException を投げる。
  // APIの仕様によって IllegalArgumentException とかに変える。
  // 場合によっては assert ってのもありかも。
  throw new NullPointerException(name);
}

共通で使うクラスのメソッドにしとけば、staticインポートして使えます。
どうやって使うかというと、こんな感じ。

<T> Class<? extends T> getClass(Class<T> type, String name) throws ... {
  return Class.forName(notNull("name", name)).asSubclass(notNull("type", type));
}

notNull()の返値をキャストしなくていいし、意外と便利だったのでメモしときます。
っていうか、こんなことしなきゃならんJavaってめんどうだ。


(おとなしくデバッガ使え、ってのは聞こえないことにしとこう。)
(追記: nullじゃないことを示す@NotNullみたいなアノテーションもできそうな気がするが、もしそうならJ2SE 5.0のAPIにないのが解せない。)