我有一个如下所示的课程。这个类在Eclipse build 20090920-1017上编译得很好:
public class MyScheduledExecutor implements ScheduledExecutorService {
...
public <T> List<Future<T>> invokeAll(Collection<Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException {
...
}
public <T> List<Future<T>> invokeAll(Collection<Callable<T>> tasks) throws InterruptedException {
...
}
public <T> T invokeAny(Collection<Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
...
}
public <T> T invokeAny(Collection<Callable<T>> tasks) throws InterruptedException, ExecutionException {
...
}
...
}
但是,如果我尝试在IntelliJ 9中编译,我会收到编译错误。如果我用<Callable<T>>
替换<? extends Callable<T>>
的所有引用,它将仅在IntelliJ中编译。例如:
public <T> T invokeAny(Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException {
...
}
不幸的是,如果我再次尝试在Eclipse中编译修改后的类,我会收到编译错误。
Name clash: The method invokeAll(Collection<? extends Callable<T>>) of type
SingleScheduledExecutor has the same erasure as invokeAll(Collection<Callable<T>>) of
type ExecutorService but does not override it
有没有办法可以创建一个实现ScheduledExectorService
的类,它将在IntelliJ和Eclipse下编译?两个IDE似乎都配置为使用Java 1.5,这对我的部署平台来说是正确的。
答案 0 :(得分:8)
在Java 6中,ExecutorService
声明了以下方法(例如):
<T> T invokeAny(Collection<? extends Callable<T>> tasks)
throws InterruptedException,
ExecutionException
但是在Java 5中,在ExecutorService
中声明了相同的方法:
<T> T invokeAny(Collection<Callable<T>> tasks)
throws InterruptedException,
ExecutionException
我没有安装Java 5并且无法使用Eclipse Java EE Galileo 20090920-1017重现错误(我在Ubuntu下并且sun-java5-jdk已从Karmic的存储库中删除而且我太懒了手动安装它,但实际上,我认为 Eclipse 是正确的。
您确定在IntelliJ IDEA中使用JDK 5(而不是符合1.5级别的JDK 6)吗?