我确定我的问题很普遍,而且几乎可以肯定它没有简单的解决方案。
所以:我有一个接口:
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);
}
我也有它的实现-BubbleSortTask,它的代码并不有趣。
该设计的主要思想是:我们可以将大型任务拆分为子任务,解决每个子任务,然后合并解决方案:
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 ());
它运作良好。但是一般情况下,我对具体的实现一无所知,我想做这样的事情:
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);
}
这段代码不起作用,我从mergeSolutions(解决方案)获取ClassCastException。但我希望主要思想是明确的。我想知道如何解决这个问题?
最佳答案
用Collection
而不是数组指定接口。