java - 使用 lambda 表达式不可能重复的功能接口解析
问题描述
具有相同功能签名的两个接口。
以 SimpleStepBuilder.processor 为例。
相同功能类型的两个重载。
传递 lambda 表达式似乎是不可能的。
对或错?
public SimpleStepBuilder<I, O> processor(ItemProcessor<? super I, ? extends O> processor) {
this.processor = processor;
return this;
}
public SimpleStepBuilder<I, O> processor(Function<? super I, ? extends O> function) {
this.itemProcessorFunction = function;
return this;
}
public interface ItemProcessor<I, O> {
@Nullable
O process(I item) throws Exception;
}
解决方案
是的,传递任何 lambdaa -> a.toB()
都会导致模棱两可的调用。
但至少有两种选择:传递一个匿名类*,转换为适当的类型。
processor((Function<String, Integer>) s -> s.length()); // Function
processor((ItemProcessor<String, Integer>) s -> s.length()); // ItemProcessor
*这不是 lambda 表达式,将其划掉!
一个可能有助于调用这些方法的小技巧:
如果ItemProcessor
扩展Function
,它将消除转换为ItemProcessor
:
interface ItemProcessor<I, O> extends Function<I, O> {}
processor((Function<String, Integer>) String::length); // Function
processor(s -> s.length()); // ItemProcessor
推荐阅读
- angular - 在 Angular 中等待带有 if 条件的 Observable 响应
- sql - UPDATE 查询卡在执行 regexp_replace 函数
- python - 在 SQLAlchemy 中,如何在使用乐观锁更新后获取受影响的行?
- cs-cart - 我们如何在安装后使 cs cart api 工作?
- xamarin - 如何在 Xamarin MAC 平台中更改选取器背景颜色
- c++ - 为 opengl 纹理加载图像时,stb_image 不会垂直翻转
- tcp - 在 TCP 中快速重传后,接收方发送的 ACK 号是多少?
- android - 将字节数组复制到分配中的Android渲染脚本问题
- c# - 如何使用 POCO 类反序列化包含数字的 JSON 属性?
- javascript - 在 react/redux 中调用 store.subscribe 中的函数