私のクラスTypeRegistererを使用すると、クライアントはパラメーター化された型を(TypeRegistererと同じパラメーターで)登録し、生の型名を使用してそれらをインスタンス化できます。
私の現在の解決策は機能しますが、チェックされていないキャスト警告があり、無視しても安全かどうかわかりません。これを行うためのより良い方法はありますか?
public class TypeRegisterer<T> {
private Map<String, TypeToken<? extends Base<T>>> registeredTypes;
public void registerType(TypeToken<? extends Base<T>> typeToken) {
registeredTypes.put(typeToken.getRawType().getSimpleName(), typeToken);
}
public Base<T> initType(String className, T feature) throws Exception {
// validation and exception handling removed for brevity
TypeToken<? extends Base<T>> ruleType = registeredTypes.get(className);
@SuppressWarnings("unchecked")
Class<? extends Base<T>> rawType = (Class<? extends Base<T>>) ruleType .getRawType();
return rawType.getConstructor().newInstance();
}
}