我正在实现一个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();
}
作为实现的第一步,我正在编写实现上述接口的Digraph类。但是,为了简单起见,我希望节点标识符为整数,因此我将函数定义为
@Override
public boolean isAdjacent(int v, int w) {
// TODO Auto-generated method stub
return adjList[v].contains(w) || adjList[w].contains(v);
}
但是,我收到错误,我需要覆盖或实现超类型的方法。有人可以解释我这种行为的基础。此外,如果有人可以解释,我们如何设计允许灵活添加任何类型组件的库。
答案 0 :(得分:6)
你的界面说:
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
可以为空,int
不可以。因此,在自动取消装箱之前,对参数进行空检查是一个好主意。