Je reconnais que je n'ai pas beaucoup d'expérience dans l'utilisation de Java Generics.Problème avec la liste générique et ajout de wrapper
À l'heure actuelle, je modernise un ancien code avec Generics pour réduire/simplifier le code existant écrit par un collègue qui a depuis quitté l'entreprise. Fondamentalement, le système sur lequel je travaille a 6 types de demandes: 1 Général, et 5 spécifiques qui héritent de Général. Chaque type de requête a des types de tâches associés.
est ici le code où je vais avoir la peine:
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;
}
}
Le problème est dans la ligne ajouter à GeneralRequest. Dans sa forme actuelle, les bombes de ligne taskList.add
avec
The method add(capture#6-of ? extends GeneralTask) in the type List<capture#6-of ? extends GeneralTask> is not applicable for the arguments (E)
Maintenant, si je change la déclaration taskList à
protected List<? super GeneralTask> taskList;
Il résout ce problème, mais les classes d'enfants me donnent une autre erreur, comme en AnnexationRequest
:
Type mismatch: cannot convert from List<AnnexationTask> to List<? super GeneralTask>
Comment puis-je résoudre ce problème afin que AddTask fonctionne correctement et je peux toujours définir la liste des tâches du constructeur?
Ah, je ne pensais pas mettre le type de tâche en tant que classe générique. Oups. – Powerlord