Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java—用对象参数实现接口_Java_Graph - Fatal编程技术网

Java—用对象参数实现接口

Java—用对象参数实现接口,java,graph,Java,Graph,我正在实现一个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(O

我正在实现一个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();
}
作为实现的第一步,我正在编写实现上述接口的有向图类。然而,为了简单起见,我希望节点标识符是整数,所以我将函数定义为

    @Override
    public boolean isAdjacent(int v, int w) {
            // TODO Auto-generated method stub
            return adjList[v].contains(w) || adjList[w].contains(v);
    }  
但是,我得到了一个错误,我需要用超类型重写或实现方法。有人能给我解释一下这种行为的基础吗。另外,如果有人可以解释,我们如何设计允许灵活添加任何类型组件的库。

您的界面说明:

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);
    ...
}
公共接口有向接口{
...
公共布尔不相邻(tv,tw);
...
}
您的实现可以是:

public class DefaultDigraph<Integer> {
    ...
    public boolean isAdjacent(Integer v, Integer w) {
        ...
    }
    ...
}
公共类DefaultDigraph{
...
公共布尔值不相邻(整数v,整数w){
...
}
...
}

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

除了
int
甚至不是
对象之外,实现的承诺不能比接口少。你的界面已经承诺可以处理任何对象。那么,我该怎么做呢?当我希望实现另一个用字符串或其他东西标识节点的类时,我希望我不需要更改接口。我知道,当我们将int传递给一个方法时,Java会在需要时自动将其转换为Object。如果找不到任何具有int参数的方法,则必须将其绑定到具有对象参数的方法。这就是我的想法。是的,对于调用是,当您调用一个方法时,参数被装箱到它的包装类中,在本例中是
Integer
,但是对于方法实现,签名必须相同。因此这不起作用:
公共布尔值是相邻的(intv,intw)
。你明白了吗?好的,谢谢弗朗西斯科给我解释。我将使用泛型来实现这一点。我的目标是拥有一个接口和多个实现,可以以不同的方式标识节点欢迎您,但请在取消装箱之前检查空值,否则您将遇到其他问题。