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);
}