Java中的泛型问题
我确信我的问题很常见,而且我几乎可以肯定它没有简单的解决办法 所以:我有一个界面:Java中的泛型问题,java,generics,Java,Generics,我确信我的问题很常见,而且我几乎可以肯定它没有简单的解决办法 所以:我有一个界面: public interface Task<E> extends Serializable { Task<E>[] splitTask (int partsNum); E mergeSolutions (E... solutions); E solveTask (); E getSolution (); Integer getId (); v
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);
}
它工作得很好。但在一般情况下,我不应该知道任何关于具体实现的事情,我想做如下事情:
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);
}
public void processTask(Task t,int subtasksNum){
Task[]ts=t.splitTask(subtasksNum);
for(任务t:ts){
t、 解决任务();
}
Object[]solutions=新对象[subtasksNum];
for(int i=0;i
此代码不起作用,我从mergeSolutions(solutions)获得ClassCastException。但我希望主要的想法是明确的。我想知道该如何解决这个问题?用
集合而不是数组来指定接口
public interface Task<E> extends Serializable {
Collection<? extends Task<? extends E>> splitTask (int partsNum);
E mergeSolutions (Collection<? extends E> solutions);
E solveTask ();
E getSolution ();
Integer getId ();
void setId (Integer id);
}
公共接口任务扩展了可序列化{
Collection我认为您的问题是将Object[]传递给mergeSolutions(),而特定的t.mergeSolutions()需要E[],无论您的E类型是什么
我不是专家,但我认为您可能需要使用一些反射来获取您的E类型,并根据这些信息将您的解决方案实例化为E[]
public interface Task<E> extends Serializable {
Collection<? extends Task<? extends E>> splitTask (int partsNum);
E mergeSolutions (Collection<? extends E> solutions);
E solveTask ();
E getSolution ();
Integer getId ();
void setId (Integer id);
}