问题标签 [functional-interface]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2407 浏览

java-8 - 如何通过带有 Mockito 的功能接口验证方法调用?

我正在使用 Supplier 实例化字段线程安全,同时避免连续调用同步方法。

当我运行单元测试时,我想确保只调用一次 initFoo()。遗憾verify(classUnderTest, times(1)).initFoo()的是没有注册 initFoo 被输入。我对此进行了调试,然后调用getFoo()确实进入了 initFoo。

有任何想法吗?

0 投票
1 回答
697 浏览

java - Java 8 中函数式接口的定义

Java 8 中函数式接口的定义说:

函数式接口被定义为具有一个明确声明 的抽象方法的任何接口。(限定是必要的,因为接口可能有非抽象的默认方法。)这就是为什么函数式接口过去被称为单一抽象 方法(SAM)接口,这个术语有时仍然可见。

那么我们怎么会有这个:

由于sort方法List是:

lambda 表达式说:

Lambda 表达式应该可以分配给功能接口

Comparator接口有两个抽象方法,它们分别是compareequals并用 注释@FunctionalInterface。这不违反只有一个抽象方法的功能接口的定义吗?

0 投票
11 回答
135266 浏览

java - Java 8 中使用的功能接口是什么?

我在 Java 8 中遇到了一个新术语:“函数式接口”。在使用lambda 表达式时,我只能找到它的一种用途。

Java 8 提供了一些内置的函数式接口,如果我们想定义任何函数式接口,那么我们可以使用@FunctionalInterface注解。它将允许我们在接口中只声明一个方法。

例如:

除了使用lambda 表达式之外,它在 Java 8 中还有多大用处?

这里的问题与我问的问题不同。它问为什么我们在使用 lambda 表达式时需要函数式接口。我的问题是:除了使用 lambda 表达式之外,函数式接口的其他用途是什么?)

0 投票
1 回答
156 浏览

java - 有没有办法将只涉及功能接口的方法统一为一个?

我有很多类,每个类都实现GeneralInterface并可能附加功能接口:

我有一个包含这些MyObjectTypeXXX实例的列表

和20-40个功能接口。这里有 2 个例子:

在代码的不同位置,我需要调用不同的iterate方法:

我的问题是,我需要维护iterate所有功能接口的方法,而它们实际上都在做同样的事情:检查对象是否实现了该接口(强制转换)并使用给定的参数调用其唯一的抽象方法。

有没有一种方法,通过语法或设计,只维护一个这样做的方法?我知道通过反思有一种不好的方式来做到这一点(我展示它只是为了表明我做了我的研究,我不想要它):

0 投票
2 回答
2710 浏览

java - Java 8 功能接口(Consumer)附加参数

是否有可能以某种方式参数化 Java 8 Consumer?我想拥有可重用的消费者,我可以在其中放置额外的参数。

calendar1,calendar2 是同一类型

如您所见,两个消费者仅在一个论点上有所不同。是否可以简化此代码/不要重复?

0 投票
1 回答
1000 浏览

java - Java 8 方法参考不止一种不同的构造函数

我正在尝试编写一个方法,该方法采用 Runnable 类的构造函数并根据输入的构造函数以某种方式运行它。

所以我希望能够做这样的事情:

我的问题是如何定义executeInParallel方法以便能够传递我在参数中定义的任何 Runnable 构造函数?基本上我的问题是为了做到这一点,我该如何定义这种方法? void executeInParallel(??){ ... }

似乎我只能将遵循功能接口的方法作为参数,所以我不能executeInParallel用一个接受多个xRunnable::new构造函数的参数来定义有没有办法让我在不使用某种工厂的情况下做到这一点图案?

我想明确说明我想这样做的原因是我想传入构造函数而不是实例。我无法在 executeInParallel 之外生成实例,它必须在该方法内生成。我还想传入采用不同参数的不同构造函数

先感谢您

编辑 对不起,我希望这个问题更清楚一点。

0 投票
2 回答
603 浏览

java - Java函数式接口

我是Java8的新手,我在 Internet 上阅读了一些关于此主题的内容。目前我正试图弄清楚什么是功能接口。我找到了一些例子,但我不明白为什么接口Skip是一个功能接口,因为它有 2 个定义的方法。我希望有人能给我解释一下。代码是:

0 投票
4 回答
1105 浏览

java - 为什么不同的谓词接口n JAVA 8?

在 Java 8 中提供了不同的谓词接口(例如 DoublePredicate、LongPredicate、IntPredicate 等)。现在,如果您要实现接口并在其中编写自己的代码,那么拥有不同的谓词接口有什么好处?为什么不只有一个谓词接口?

0 投票
0 回答
63 浏览

java - Java 方法引用使用两个参数调用具有一个参数的功能接口

我完全不明白编写如下表达式是如何有效的:

因为:

  1. nullsLast接受 aComparator作为参数
  2. Comparatoris的函数方法compare(T, T),它接受两个参数
  3. compareTo只接受一个参数
  4. 如果没有双冒号运算符,我会写: Comparator<String> stringComp = Comparator.nullsLast((s1, s2) -> s1.compareTo(s2));

那么这是否意味着,当在只接受一个参数的方法上使用双冒号运算符时,推断该方法应该在 lambda 的第一个参数上调用,使用 lambda 的第二个参数作为参数?这对我来说非常令人惊讶。

0 投票
0 回答
67 浏览

java - 你可以传递带有任意参数但特定类型的函数吗?

据我了解,FunctionalInterface 是确保传递给另一个方法的方法的参数和返回类型是正确类型的契约。例如,

允许您编写一个函数:

其中“操作”可以是任何接受 0 个参数并返回 T 类型对象的函数。有没有办法编写“methodCaller”以便“操作”可以是任何接受任何参数的函数(但仍返回 T 类型的对象)? 如果不是,为什么?

本质上是这样的:

但它适用于任何带有任何参数的函数,它仍然返回 T。