Java - 使用 Object 参数实现接口(interface)

标签 java graph

我正在实现一个 Java Graph 库(学习......)。据此,我写了一个接口(interface)

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();
}

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

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

但是,我遇到了错误,我需要覆盖或实现具有父类(super class)型的方法。有人可以向我解释这种行为的基础。此外,如果有人可以解释,我们如何设计允许灵活添加任何类型组件的库。

最佳答案

你的界面说:

public boolean isAdjacent(Object v, Object w);

你实现:

public boolean isAdjacent(int v, int w)

对于 java,this 没有相同的签名,因此不是相同的方法。你可以做的是使用泛型,这取决于你需要什么,但在这种情况下你可以做类似的事情:

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 不是。因此,在自动拆箱之前对参数进行空检查是个好主意。

关于Java - 使用 Object 参数实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11373595/

相关文章:

java - 对于本地化的从右到左的语言字符串,JavaFX 中显示的括号不一致

java - 如何进行水平顺序遍历?

git - git repo 变化量的图表

graph - 制作维基百科链接树

c++ - 如何遍历节点 vector

java - 在 Libgdx 中配置屏幕的正确方法

java - 导出的jar文件执行后卡住

python - Matplotlib 中等高线下方的网格线

Java Atm机(如何添加备注)

algorithm - 邻接表中的大 O - 删除顶点并删除边缘(对图执行各种操作的时间复杂度成本)