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)キャストで無検査キャスト警告が出るのを無くしたい(キャストを無くしたい)。
どうすればよいだろうか?
どうもむりぽ