Учитывая эти классы:Java - Возвращайтесь различные классы детей на основе входных параметров
public class VersionVOV1 extends BaseVO {
private String fieldOne = null;
public String getFieldOne() {
return fieldOne;
}
public void setFieldOne(String fieldOne) {
this.fieldOne = fieldOne;
}
public class VersionVOV2 extends BaseVO {
private String fieldFour = null;
public String getFieldFour() {
return fieldFour;
}
public void setFieldFour(String fieldFour) {
this.fieldFour = fieldFour;
}
}
public class BaseVO {
// common code here
}
У меня есть метод doSomething
вызова, который возвращает конкретный дочерний класс, основанный на входной строки:
public BaseVO doSomething(String version) {
BaseVO versionVO = doSomethingVersioned(createVersionVO(version));
return versionVO;
}
Остальные методы:
private BaseVO createVersionVO(String version) {
BaseVO versionVO = null;
if (version.equalsIgnoreCase("V1")) {
versionVO = new VersionVOV1();
} else if (version.equalsIgnoreCase("V2"))
versionVO = new VersionVOV2();
return versionVO;
}
protected VersionVOV1 doSomethingVersioned(VersionVOV1 versionVO) throws Exception {
versionVO.setFieldOne("The versionVO is of type: " + versionVO.getClass());
versionVO.setFieldTwo("Field two");
versionVO.setFieldThree("Field three");
return versionVO;
}
protected VersionVOV2 doSomethingVersioned(VersionVOV2 versionVO) throws Exception {
versionVO.setFieldOne("The versionVO is of type: " + versionVO.getClass());
versionVO.setFieldThree("Field three");
versionVO.setFieldFour("Field four");
return versionVO;
}
Как вы можете видеть, я переопределил doSomethingVersioned
, чтобы взять определенный дочерний класс. Моя проблема, однако, связана с ошибкой компиляции, которая выглядит так: doSomethingVersioned
: Метод doSomethingVersioned (VersionVOV1) в типе VersionExample не применим для аргументов (BaseVO).
Я попытался возвращающая тип <T extends BaseVO>
из createVersionVO
но я получаю другие ошибки компиляции в этом методе с указанием несоответствия типов: невозможно преобразовать из VersionVOV1 до Т.
Я чувствую, что это должно быть проще, чем я это делаю. Как я могу сохранить этот общий шаблон, но разрешить это скомпилировать?
Спасибо всем, кто помогает!
Использование дженериков! Они твой друг! – StackFlowed