У меня есть класс, который выглядит следующим образом. Этот класс прекрасно компилируется в 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, я получаю ошибку компиляции. Он будет компилироваться только в IntelliJ, если я заменю все ссылки на <Callable<T>>
на <? extends Callable<T>>
. Например:
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, что подходит для моей платформы развертывания.