我有以下课程:
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;
}
}
现在,很好的是,当我调用 implementationClass.helperClass 时,它会自动将其转换为 HelperClass。但是,我想知道我是否真的需要编写和覆盖 getHelperClass。我不能写 helper.getClass (因为它可能是空的),而且我知道我写它的方式有一个类型擦除问题。
但是,有没有办法让我重写我的代码以避免必须以两种方式声明 helperClass 并且仍然对其进行类型推断?