-Tiger

どうも風邪が抜けない中、Java5の新機能を再度見直すべく本を読んでます。

public interface Foo< T > {
  void setValue(T value);
  T getValue();
}

こんな小サンプルにJava5の大きな機能が隠れていたりします。ジェネリックスで引数型が変わるsetValue()のほうはまっとうミエミエで、まだよしとしましょう。しかし、返値が変わるgetValue()を見て、疑問が生じるはずです。返値が変えられるって。。。そう、Java5からは条件整えば返値が変更できるんですよ。こういうのはまだ、普通に本に書いてあります。JavaWorldとかでも探せばある。
しかし、書いてあるのはこのぐらいの入門レベルぐらいまでで、アノテーションジェネリックス、enumなどをフレームワーク実装するレベルで深く利用するための読み物はまったく見当たらない。。。たぶん書き溜めて置くと何かと使えそうなので気がついたことやサンプルコードなどをメモするようにしています。しばらく待っても書かれたものが出てこないようでしたら、どっかで世に出すことでしょう。たぶん。

public class Bar {
  public String getValue() {
    return "String";
  }
  public Object getValue(int t) {
    return t;
  }
  public static void main(String[] args) {
    Bar bar = new Bar();
    System.out.println(bar.getValue());
    System.out.println(bar.getValue(3));
  }
}

上記コードはJava5ならばコンパイル可で、ちゃんと動きます。1.4以前ではコンパイルできません。ジェネリックス機能の副産物ですね。
追記
コメント欄参照ください。上記の私の記事の中、ウソ情報アリ、です。