Java8中的BiSupplier
我所看到的BiConsumer,BiPredicate,BiFunction但不能BiSupplier或类似。我尝试了下面的代码,但有一个异常说:
“在 BiSupplier 中发现的多个非覆盖抽象方法”。
@FunctionalInterface
public interface BiSupplier<T, R> {
/**
* Gets a first.
*
* @return a first
*/
T getFirst();
/**
* Gets a second.
*
* @return a second
*/
R getSecond();
}
可以请一些人帮我解决这个问题。
回答
Function(Predicate或Consumer)之间的概念是不同的Supplier。
一个简单的解释表:
Function将 1 个输入转换为 1 个输出。BiFunction转换 2 个输入。所以理论上,可以有TriFunction等......Predicate工作原理相同,Function但输出始终为boolean.Consumer消耗 1 个输入并且不返回任何内容 (void)。BiConsumer消耗2个输入。所以理论上,可以有TriConsumer等......
现在,Supplier。的Supplier线匝没有(0输入)变换为输出。请注意,上面的功能接口提供一个( Functionand Predicate) 或无( Consumer) 输出。
Supplier从创造的东西没有如你所知,这是不可能有一个以上的返回类型。从理论上讲,BiSupplier这意味着“从两个虚无中创建一些东西”,这在 Java 上下文中是没有意义的(但是,“一个虚无”确实如此:)Supplier<String> supplier = () -> "Hi";。
你可以理解Supplier<T>为Function<Void, T>(在实践中不起作用,但原理是一样的)。现在,BiSupplier<T>将BiFunction<Void, Void, T>它真的没有任何意义。