私は次のクラスを持っています:
public abstract class ClassWithHelper<T extends HelperInterface> {
Class<T> helperClass;
protected T helper;
protected Gson gson = new GsonBuilder().create();
public void loadHelper(String helperString) throws InstantiationException, IllegalAccessException {
if (!Strings.isNullOrEmpty(helperString)) {
wizard = gson.fromJson(helperString, getHelperClass());
} else {
wizard = getHelperClass().newInstance();
}
}
protected abstract Class<T> getHelperClass();
}
public class ImplementingClass extends ClassWithHelper<HelperClass> {
@Override
protected Class<HelperClass> getHelperClass() {
return HelperClass.class;
}
}
すばらしいのは、implingingClass.helperClass を呼び出すと、それが自動的に HelperClass にキャストされることです。ただし、getHelperClass を作成してオーバーライドする必要があるかどうかは疑問です。私は helper.getClass を書くことができません (null の可能性があるため)。それを書いた方法には型消去の問題があることを知っています。
ただし、コードを書き直して、helperClass を 2 つの方法で記述しなくても型を推論できるようにする方法はありますか?