当前位置: 首页 > 知识库问答 >
问题:

带有对象参数的Java实现接口

卢皓轩
2023-03-14

我正在实现一个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();
}

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

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

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

共有1个答案

支阳波
2023-03-14

你界面说:

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

 类似资料:
  • 我被要求编写一个Java程序,它将TSV文件作为一个插注,并生成一个不同的TSV文件(其中有相当多的变化,在输入和参数上非常可变)作为输出。 这是一个相当大的程序(花了我3天的时间来编码,但我不擅长),它终于开始处理来自15k行的输入,生成1500K行输出。 写代码时,我不知道我必须在Talend中实现它,所以这是一个普通的Java程序,有4个参数:输入文件名,输出文件名,int,int 我设法把

  • 问题内容: 有没有为接口方法创建默认实现的首选方法或样式?假设我有一个常用的接口,在90%的情况下,我想要的功能是相同的。 我的第一个直觉是用静态方法创建一个具体的类。然后,当我想要默认功能时,可以将功能委托给静态方法。 这是一个简单的示例: 接口 方法的具体实现 使用默认功能的具体实现 这里有更好的方法吗? 编辑 在看到了一些建议的解决方案之后,我认为我应该更加清楚自己的意图。本质上,我正在尝试

  • 问题内容: 我正在阅读Wikipedia上的Singleton文章,并且遇到了以下示例: 虽然我真的很喜欢Singleton的行为方式,但是我看不到如何修改它以将参数合并到构造函数中。用Java进行此操作的首选方法是什么?我需要做这样的事情吗? 谢谢! 编辑:我想我对使用Singleton的渴望已经引发了一场争论的风暴。让我解释一下我的动机,并希望有人可以提出一个更好的主意。我正在使用网格计算框架

  • 我在Springdoc生成的OpenAPI规范中得到了验证错误,并且无法在网上找到与Java代码格式相匹配的示例。 我试图用Springdoc为Spring Boot控制器生成OpenAPI规范。我有一个具有多个路径变量的路径映射,方法签名接受一个命令对象(命令对象是由这些路径变量自动构造的)。swagger-ui.html似乎或多或少地起作用了,但是生成的JSON/YAML规范似乎并不有效。 为

  • 本文向大家介绍Java动态获取实现某个接口下所有的实现类对象集合,包括了Java动态获取实现某个接口下所有的实现类对象集合的使用技巧和注意事项,需要的朋友参考一下 最近有个需求,我需要获取所有同一类型的定时任务的对象,并自动执行。 我想的方案是:直接获取某个接口下面所有的实现类的对象集合,方便以后只需要 实现这个接口,就能自动被加载执行。话不多说,说说我的实现方案。 开始想着用反射自己写一个工具类

  • 为什么我不能这样做?我得到编译错误。 那是Java8 我不认为这里违反了任何OO原则。 这真的让我很难实现通用 API...... (我试图将泛型从游戏中剔除,因为泛型API变得反直觉了)