当前位置: 首页 > 面试题库 >

接口作为Java中的方法参数

汪泓
2023-03-14
问题内容

我几天前接受采访时,被问到这样的问题。

问:反向链接列表。给出以下代码:

public class ReverseList { 
    interface NodeList {
        int getItem();
        NodeList nextNode();
    }
    void reverse(NodeList node) {

    }
    public static void main(String[] args) {

    }
}

我很困惑,因为我不知道接口对象可以用作方法参数。面试官解释了一下,但我仍然不确定。有人可以启发我吗?


问题答案:

实际上,这是使用接口的最常见和最有用的方法之一。该接口定义了一个契约,您的代码可以与实现该接口的任何类一起使用,而无需了解具体的类-
它甚至可以与编写代码时尚不存在的类一起使用。

Java标准API中有很多示例,尤其是在collections框架中。例如,Collections.sort()可以排序任何实现的List接口(不只是ArrayList或者LinkedList,虽然实现自己的List不常见),其内容实现Comparable接口(不只是String或数值包装类-
和拥有自己的类实现Comparable为目的 普遍)。



 类似资料:
  • 在编写了自己的通用功能接口并将其用于lambdas之后,我必须在一种新方法中使用它: 将通用数组作为输入处理,检查其最小长度是否为4 处理我的功能界面的任何实例 处理lambda表达式的任何实例,该表达式接受一个参数,但不返回任何内容 应用于函数接口实例的结果(这里我想我必须使用使用者) 以前从未使用过函数接口,有人能解释一下我应该如何将2个函数接口作为方法参数传递吗? 例如:

  • 问题内容: 我不知道为什么此代码在PHP中不起作用? 看来它没有违反任何OOP规则,但是为什么它给我一个错误? 问题答案: 它 确实 违反了SOLID规则。您声明接受一个类型的参数,但子级接受一个类型的参数。即使是的子类型,它仍然是不同的类型。 当上课的时候,上课也是正确的。但是接受一个,但是不接受一个。因此,据推测,但不接受type参数。这打破了Liskov替代原则。您不能在子接口,周期中更改参

  • 问题内容: 我是Go编程语言的新手,最近遇到了以下代码: 但是,我不理解函数签名背后的含义。它接受接口作为参数。你能解释一下这是怎么回事吗?谢谢 问题答案: Go使用接口来泛化类型。因此,如果您想要一个带有特定接口的函数,则可以编写 可以将满足的每种类型传递给。 现在,可以如下所示: 为了满足,实现它的类型必须实现。 但是,如果您需要一个空接口(),则该对象不需要实现要传递给该函数的任何方法: 上

  • 问题内容: 我有一个界面: 和一个实现它的类 第三类实现了此方法: 现在我试图像这样调用该方法 但我不断得到一个例外说: 如果它连接了该类,该方法不起作用吗? 问题答案: 也许你需要

  • 问题内容: 我正在寻找一种通过引用传递方法的方法。我知道Java不会将方法作为参数传递,但是,我想找到一种替代方法。 有人告诉我接口是将方法作为参数传递的替代方法,但我不了解接口如何通过引用充当方法。如果我理解正确,那么接口就是一组未定义的抽象方法。我不想发送每次都需要定义的接口,因为几种不同的方法可以使用相同的参数调用同一方法。 我要完成的工作与此类似: 调用如: 问题答案: 编辑:从Java

  • B类: 如何影响这个界面?