Je suis sûr que mon problème est commun et je suis presque sûr qu'il n'a pas de solution facile.Problème avec les génériques en Java
donc: je une interface:
public interface Task<E> extends Serializable {
Task<E>[] splitTask (int partsNum);
E mergeSolutions (E... solutions);
E solveTask();
E getSolution();
Integer getId();
void setId (Integer id);
}
Et j'ai aussi sa mise en œuvre - BubbleSortTask, son code est pas intéressant. L'idée principale de cette conception: nous pouvons diviser énorme tâche à sous-tâches, résoudre tous les sous-tâche, puis fusionner des solutions:
Integer[] array = {1, 4, 9, 3, 3, 0, 8, 2, 6};
BubbleSortTask bst = new BubbleSortTask (array);
Task[] ts = bst.splitTask (2);
for (Task t : ts) {
t.solveTask();
}
bst.mergeSolutions (((BubbleSortTask)ts[0]).getSolution(),
((BubbleSortTask)ts[1]).getSolution());
Il fonctionne bien. Mais dans le cas général, je ne saurais rien la mise en œuvre concrète, je veux faire quelque chose comme ceci:
public void processTask (Task t, int subtasksNum) {
Task[] ts = t.splitTask (subtasksNum);
for (Task t : ts) {
t.solveTask();
}
Object[] solutions = new Object[subtasksNum];
for (int i = 0; i < subtasksNum; i++) {
solutions[i] = ts[i].getSolution();
}
t.mergeSolutions (solutions);
}
Ce code ne fonctionne pas, je reçois ClassCastException de mergeSolutions (solutions). Mais j'espère que l'idée principale est claire. Je me demande comment dois-je résoudre ce problème?
Je vais essayer demain) – Roman
remercient, maintenant ça marche bien – Roman