これは簡単な解決策です..醜さを完全に隠します。ここでのアプローチは、結果の型を暗黙的にバインドし、それを渡された生のクラスから分離することです。
public class GenericClass<T> {
public GenericClass(Class<T> cls) {}
// static constructor;
// - hides unchecked ugliness, & implicitly binds 'nicely typed' to result.
//
public static <T> GenericClass<T> create (Class<? super T> clazz) {
// ugly cast is hidden in here; no type checking.
Class<T> clazz_ = (Class<T>)(Class) clazz;
return new GenericClass( clazz_);
}
}
使用法:
GenericClass<List<String>> g = GenericClass.create( List.class);
今のところ「渡されたクラス」のクラズを制限しました? super T
が、これが厳しすぎる場合は、制限を緩和してパラメーターをちょうどClass<?> clazz
.
このソリューションは、私の IDE で (少なくとも迅速に) テストされており、うまく機能しているようです。長期的には、これがあなたが抱えている設計上の問題を解決するための最良の方法であるかどうかはわかりませんが、差し迫った質問を解決するための最も適切な方法であることは間違いありません.