Я признаю, что у меня нет большого опыта использования Java Generics.Проблема с общим списком и добавлением обертки
Прямо сейчас, я обновляю старый код с помощью Generics, чтобы уменьшить/упростить существующий код, написанный коллегой, который с тех пор покинул компанию.
В принципе, система, в которой я работаю, имеет 6 типов запросов: 1 общий и 5 конкретных, которые наследуются от генерала. Каждый тип запроса связан с типами задач.
Вот код, где у меня неприятности:
public class GeneralRequest implements Serializable {
protected List<? extends GeneralTask> taskList;
public <E extends GeneralTask> boolean addTask(E newTask) {
boolean returnvalue = false;
if(!this.taskList.contains(newTask)){
returnvalue = taskList.add(newTask);
}
return returnvalue;
}
}
public class AnnexationRequest extends GeneralRequest implements Serializable {
public AnnexationRequest(List<AnnexationTask> tal) {
this.taskList = tal;
}
}
Проблема заключается в надстройке линии в GeneralRequest. В настоящее время написано, что taskList.add
линии бомбы с
The method add(capture#6-of ? extends GeneralTask) in the type List<capture#6-of ? extends GeneralTask> is not applicable for the arguments (E)
Теперь, если я изменить объявление TaskList к
protected List<? super GeneralTask> taskList;
Он исправляет эту проблему, но затем дочерние классы дают разные ошибки, такие как в AnnexationRequest
:
Type mismatch: cannot convert from List<AnnexationTask> to List<? super GeneralTask>
Как я могу это исправить, так что AddTask работает должным образом, и я все еще могу установить список задач из конструктора?
Ах, я не думал поставить тип задачи как класс родовым. Упс. – Powerlord