这是一个显示我的问题的简化示例:
import java.util.List;
public interface SingleTask extends List<Runnable>, Runnable {
default Runnable get(final int x) {
if (x != 0) {
throw new IndexOutOfBoundsException();
}
return this;
}
default int size() {
return 1;
}
}
import java.util.AbstractList;
public class MyTask extends AbstractList<Runnable> implements SingleTask {
@Override
public void run() {
System.out.println("hello");
}
}
在SingleTask
我提供了方法get
和的实现size
,它们是AbstractList
. 但是,当我编译时MyTask
,我仍然会收到如下错误:
MyTask 类型必须实现继承的抽象方法 AbstractCollection.size()
或者
MyTask.java:3:错误:MyTask 不是抽象的,并且不会覆盖 AbstractList 中的抽象方法 get(int)
(取决于编译器)。当然,我使用的是 java 8。
所以我有两个问题:
- 为什么我会收到这些错误?我期待它能够识别默认实现。
- 如果它不应该那样工作,那么在
MyTask
不复制整个代码的情况下使用这两种方法的最简单方法是什么?