首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BiSupplier in Java8

BiSupplier in Java8
EN

Stack Overflow用户
提问于 2021-03-09 14:50:39
回答 3查看 2.7K关注 0票数 4

我见过BiConsumerBiPredicateBiFunction,但没有看到BiSupplier或类似的。我尝试了下面的代码,但得到了一个例外,它说:

“在BiSupplier中找到的多个非重写抽象方法”。

代码语言:javascript
复制
@FunctionalInterface
public interface BiSupplier<T, R> {

    /**
     * Gets a first.
     *
     * @return a first
     */
    T getFirst();


    /**
     * Gets a second.
     *
     * @return a second
     */
    R getSecond();
}

能帮我个忙吗。

EN

回答 3

Stack Overflow用户

发布于 2021-03-09 14:59:26

Function (PredicateConsumer)之间的概念与Supplier不同。

一个简单的解释表:

  • Function将1输入转换为1输出。BiFunction转换2个输入。因此,从理论上讲,可以有etc...
  • PredicateFunction一样工作,但是输出总是boolean.
  • Consumer消耗1输入而不返回任何东西(void)。BiConsumer消耗2个输入。所以理论上,可以有TriConsumer等.

现在,SupplierSupplier不将任何东西(0输入)转换为输出。请注意,上面的功能接口提供了一个输出(FunctionPredicate)或无输出(Consumer)。

Supplier是从零开始创建的,正如您所知道的,不可能有多个返回类型。从理论上讲,BiSupplier意味着“从两个零开始创建一些东西”,这在Supplier<String> supplier = () -> "Hi";上下文中是没有意义的(然而,“一个什么都没有”:Supplier<String> supplier = () -> "Hi";)。

您可以将Supplier<T>理解为Function<Void, T> (在实践中不起作用,但原则相同)。现在,BiSupplier<T>将是BiFunction<Void, Void, T>,这是完全没有意义的。

票数 10
EN

Stack Overflow用户

发布于 2021-03-09 14:58:50

一个BiSupplier根本就没有意义。方法在Java中返回单个类型的值。

因此,您应该简单地创建一个包含这两个值的类并返回:

代码语言:javascript
复制
class MyValue<T, R> {
    private final T first;
    private final R second;

    // constructors, getters.
}

然后只使用Supplier<MyValue<T,R>>,而不是创建一个新的函数接口。

票数 2
EN

Stack Overflow用户

发布于 2022-08-10 05:19:28

您的代码是错误的,您用FunctionalInterface注释了接口,但是它有两个抽象方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66549177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档