Java5 Generics

やっぱだめだめ。

  • SuppressWaningsの解釈処理がjavacに実装されていない。
  • Object型をパラメータ内の型にキャストすると警告になる
    • Class型は何とかなる

Class.asSubclassの使い方

Class c = String.class; //この文はレガシーライブラリメソッドなどの代わり
Class<?> ac = c; // ?への代入は警告なし(この代入は必須)
Class<? extends String> qsc = ac.asSubclass(String.class); //? extends にする必要がある
String s = qsc.newInstance(); // Stringは? extends Stringの親クラスなので代入オーケー

このうち、

Class<?> ac = c;

が結構強力。これをやると無検査呼び出しの警告の大半を消せる。

問題は以下:

// インタフェースを定義
abstract class G<D extends G<D>> {
   abstract D typedThis();
}

// 実装を定義
class DG<D extends DG<D>> extends G<D> {
  D typedThis() {
    return (D) this;
  }
}

// やりたいことは具体クラスで上記実装を書かずに有効にすること
class C extends DG<C> {
}

C cdash = c.typedThis();

この(D)キャストで無検査キャスト警告が出るのを無くしたい(キャストを無くしたい)。
どうすればよいだろうか?

どうもむりぽ