Java - 使用Object参数实现接口

Cod*_*Fun 3 java graph

我正在实现一个Java Graph库(要学习......).因此,我写了一个界面

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();
}
Run Code Online (Sandbox Code Playgroud)

作为实现的第一步,我正在编写实现上述接口的Digraph类.但是,为了简单起见,我希望节点标识符为整数,因此我将函数定义为

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

但是,我收到错误,我需要覆盖或实现超类型的方法.有人可以解释我这种行为的基础.此外,如果有人可以解释,我们如何设计允许灵活添加任何类型组件的库.

Fra*_*eth 6

你的界面说:

public boolean isAdjacent(Object v, Object w);
Run Code Online (Sandbox Code Playgroud)

你实现:

public boolean isAdjacent(int v, int w)
Run Code Online (Sandbox Code Playgroud)

对于java这个签名不一样,因此方法不一样.你可以做的是使用泛型,这取决于你需要什么,但在这种情况下你可以做类似的事情:

public interface DigraphInterface<T> {
    ...
    public boolean isAdjacent(T v, T w);
    ...
}
Run Code Online (Sandbox Code Playgroud)

你的实施可能是:

public class DefaultDigraph<Integer> {
    ...
    public boolean isAdjacent(Integer v, Integer w) {
        ...
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

当然你需要小心,因为Integer可以是null,而int不是.因此,在自动取消装箱之前,对参数进行空检查是个好主意.