は、ここに私の問題を示す簡単な例です:SingleTask
でデフォルトのインターフェイスメソッドを実装する必要がありますか?
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");
}
}
私はAbstractList
からのみ抽象メソッドな方法get
とsize
、の実装を提供します。
The type MyTask must implement the inherited abstract method AbstractCollection.size()
または
は(コンパイラに依存する):しかし、私はMyTask.java:3: error: MyTask is not abstract and does not override abstract method get(int) in AbstractList
MyTask
をコンパイルするとき、私はまだのようなエラーが発生します。なぜ私はこれらのエラーを
- 取得しています:私は、だから私は二つの質問をしているのjava 8
を使用して、当然のことながら、午前?私はそれがデフォルトの実装を認識することを期待していました。
- そのように動作するはずがない場合は、コード全体をコピーしないで
MyTask
の2つの方法を使用する最も簡単な方法は何ですか?またList
のすべてのメソッドを実装するためにSingleTask
実装を強制
タスクを 'List'に拡張しないでください(意味的にはどういう意味ですか?)、 'publicリスト getRunnables();'メソッドを使ってインタフェース 'Task'を作成してください。それに失敗した場合、単純に 'SingleTask'をインターフェースではなく抽象クラスにしてください。 –
biziclop
Eclipseは 'size()'が実装されていないことに気づいています。これはおそらくEclipseのバグです。 'javac' 1.8.0_51は実装されていない' get(int) 'で窒息しています。それは実装されていません。 – Tunaki
@biziclopこれはタスクのリストになっているはずです。 SingleTaskはシングルトンの実装です – aditsu