4

私はJavaグラフライブラリを実装していました(学ぶために...)。したがって、私はインターフェースを書きました

public interface DigraphInterface {
    public boolean isEmpty();
    public int size();
    public boolean isAdjacent(Object v, Object w);
    public void insertEdge(Object v, Object w);
    public void insertVertex(Object v);
    public void eraseEdge(Object o, Object w);
    public void eraseVertex(Object v);
    public void printDetails();
}

実装に向けた最初のステップとして、上記のインターフェイスを実装するDigraphクラスを作成しています。ただし、簡単にするために、ノード識別子を整数にしたいので、関数を次のように定義しました。

    @Override
    public boolean isAdjacent(int v, int w) {
            // TODO Auto-generated method stub
            return adjList[v].contains(w) || adjList[w].contains(v);
    }  

しかし、スーパータイプでメソッドをオーバーライドまたは実装する必要があるというエラーが発生しています。誰かが私にこの行動の基盤を説明できますか?また、誰かが説明できる場合、任意のタイプのコンポーネントを柔軟に追加できるライブラリをどのように設計しますか。

4

1 に答える 1

7

あなたのインターフェースは言う:

public boolean isAdjacent(Object v, Object w);

実装する:

public boolean isAdjacent(int v, int w)

Javaの場合、これは同じシグネチャを持たないため、同じメソッドではありません。あなたができることはジェネリックを使用することです、それはあなたが必要とするものに依存します、しかしこの場合あなたは次のようなことをすることができます:

public interface DigraphInterface<T> {
    ...
    public boolean isAdjacent(T v, T w);
    ...
}

実装は次のようになります。

public class DefaultDigraph<Integer> {
    ...
    public boolean isAdjacent(Integer v, Integer w) {
        ...
    }
    ...
}

Integerもちろん、nullになる可能性があるので、注意する必要がありますint。したがって、パラメータのnullチェックは、自動アンボックス化の前に行うことをお勧めします。

于 2012-07-07T08:51:07.633 に答える