为什么java会创建错误以将对象强制转换为可调用对象?

时间:2014-12-22 13:28:17

标签: java multithreading completion-service

我正在尝试运行CompletionService来执行线程数。这是我的代码

CompletionService<ReadProcess_MongoDB> taskCompletionService;
    taskCompletionService = new ExecutorCompletionService<ReadProcess_MongoDB>(pool);

 Collection<Callable<ReadProcess_MongoDB>> list = new LinkedList<Callable<ReadProcess_MongoDB>>();
       list.add((Callable<ReadProcess_MongoDB>) new ReadProcess_MongoDB(0));
       list.add((Callable<ReadProcess_MongoDB>) new ReadProcess_MongoDB(1));

Java在list.add上显示运行时错误 Eror :-(不能转换为java.util.concurrent.Callable)。

2 个答案:

答案 0 :(得分:1)

在这一行

list.add((Callable<ReadProcess_MongoDB>) new ReadProcess_MongoDB(0));

您正试图 new ReadProcess_MongoDB(0) Callable<ReadProcess_MongoDB>作为ReadProcess_MongoDB。如果失败,那是因为您的Callable<ReadProcess_MongoDB>类无法转换为Callable<ReadProcess_MongoDB>;而这只能是因为你没有在那个班级中实现public class ReadProcess_MongoDB implements Callable<ReadProcess_MongoDB> { //... }

将其声明为

Callable

然后,您需要确保您的类实现Callable<T>接口的方法。只有一个:call()方法。

(在你自己的脑海中清楚地知道这确实是你想要的。你确定你不希望它为其他类型T实现{{1}}吗?)

答案 1 :(得分:0)

java编译器说ReadProcess_MongoDB类不是java.util.concurrent.Callable类的子类。

  • 你的意思是另一个Callable课吗?在这种情况下,您应该在演员表中指定完整的包名: .Callable
  • 否则,您可能需要实现Callable类/接口以使用您创建的ReadProcess_MongoDB对象。