1

マルチセットのように機能するクラスを構築することになっている Java 割り当てがあります。クラスは Collections インターフェイスを実装する必要があります。私はこれを行い、コレクションにあるすべてのメソッドを宣言しようとしました (ここにあります)。しかし、このコードをコンパイルすると、次のエラーが発生します。

error: TreeMultisetNy is not abstract and does not override abstract method retainAll(Collection<?>) in Collection

なぜこうなった?

私のコードは次のとおりです。

import java.util.*;

public class TreeMultisetNy<E extends Comparable<E>> implements Collection<E> {
private Map<E, Integer> data = new TreeMap<E, Integer > ();

public boolean add(E ny) { 
    return true;
}
public boolean addAll(Collection<? extends E> c){
    return false;
}
public void clear() {

}
public boolean contains(E what) {
    return false;
}
public boolean containsAll(Collection<?> c) {
    return false;
}
public boolean equals(E what) {
    return false;
}
public int hashCode() {
    return 0;
}
public boolean isEmpty() {
    return false;
}
public Iterator<E> iterator() {
    return null;
}
public boolean remove(E what) {
    return false;
}
public boolean removeAll(Collection<?> c) {
    return false;
}
public boolean retainAll(Collection<?> c) {
    return false;
}
public int size() {
    return 0;
}
public Object[] toArray() {
    return null;
}
public Object[] toArray(Object[] a){
    return null; 
}
}

私はこの質問を見つけました: Java.util.collectionsを実装するクラスを作成する方法

ヒントを教えてください。私は何年も PHP をコーディングしていますが、オブジェクト指向は初めてです。

4

1 に答える 1

1

" " メソッドの正しい署名はAll次のとおりです。

boolean addAll(Collection<? extends E> c)
boolean containsAll(Collection<?> c)
boolean removeAll(Collection<?> c)
boolean retainAll(Collection<?> c)

それに応じてクラスを変更する必要があります。

また、引数が 1 つのバージョンの署名toArray()は間違っています。そのはず

public <T> T[] toArray(T[] a)

同じ行に他のエラーがあります。各メソッドが正確に正しい署名を持っていることを確認して、慎重にクラスを調べる必要があります。

詳細については、 Javadocを参照してください。

于 2013-04-07T17:11:31.330 に答える