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

Java Lambdas接口[重复]

酆茂才
2023-03-14

你们都知道我们工程师晚上工作最好:)昨天晚上我在学习lambdas,我看到了一段这样的代码,

    BirdCompare tester = new BirdCompare();
    MathOperation addition = (a, b) -> (a + b);
    MathOperation subtraction = (int a, int b) -> (a - b);
    MathOperation multiplication = (int a, int b) -> {
        return a * b;
    };
    MathOperation division = (a, b) -> a / b;

    interface MathOperation {
        int operation(int a, int b);
    }

共有1个答案

夹谷浩博
2023-03-14

您可以将lambda表达式赋给一个全等的函数接口类型--即参数类型和返回类型匹配。请参阅JLS第15.27.3节了解确切的详细信息,但本质上:

如果t是函数接口类型(§9.8),并且lambda表达式与从t派生的基本目标类型的函数类型相同,则lambda表达式在赋值上下文、调用上下文或转换上下文中与目标类型t兼容。

JLS第9.8节定义了一个功能接口:

函数接口是一个只有一个抽象方法(除了object的方法)的接口,因此表示一个函数契约。

您的MathOperation接口不是Java内置的,也不是用@functionalinterface注释的。它有一个抽象方法,参数和返回类型匹配,因此它合格。

 类似资料:
  • 为什么在实现Comparator接口时不需要重写equals()方法?comparator中的equals()既不是静态的,也不是默认的。 在同一行中,我还想问,当Comparator有两个抽象方法compare()和equals()时,它是如何作为一个函数接口的?

  • 问题内容: 我计划在我的Swift项目中使用Google Drive API 。我正在尝试通过CocoaPods(v0.39.0)添加Drive SDK。以下是我的Podfile。 我添加了标志,以便CocoaPods可以将Objective-C Pod转换为Swift框架,而不是静态库。 吊舱安装成功。但是,当我构建项目时,出现以下错误。 类“ GTMHTTPUploadFetcher”的接口定

  • 我已经创建了一个接口并编写了实现。在我的主类中,我为接口“interf5”创建了实例,也为实现类“Demo3”创建了实例。 这两个实例'i'有什么区别 请在下面找到我的代码。

  • 问题内容: 我对此事仍然有些困惑。我到目前为止发现的是 (这里已经问过类似的问题,但我还有其他几点。) 接口是仅抽象方法和最终字段的集合。 Java中没有多重继承。 接口可以用于在Java中实现多重继承。 继承的一个强项是我们可以在派生类中使用基类的代码,而无需再次编写。可能这是继承在那里最重要的事情。 现在.. Q1。由于接口仅具有抽象方法(无代码),因此,如果我们实现任何接口,那么该如何继承呢

  • 节点对象除了继承 Node 接口以外,还拥有其他接口。ParentNode接口表示当前节点是一个父节点,提供一些处理子节点的方法。ChildNode接口表示当前节点是一个子节点,提供一些相关方法。 ParentNode 接口 如果当前节点是父节点,就会混入了(mixin)ParentNode接口。由于只有元素节点(element)、文档节点(document)和文档片段节点(documentFra

  • 节点都是单个对象,有时需要一种数据结构,能够容纳多个节点。DOM 提供两种节点集合,用于容纳多个节点:NodeList和HTMLCollection。 这两种集合都属于接口规范。许多 DOM 属性和方法,返回的结果是NodeList实例或HTMLCollection实例。主要区别是,NodeList可以包含各种类型的节点,HTMLCollection只能包含 HTML 元素节点。 NodeList