Java8中无入参返回类实例的方法该使用哪个函数式接口
适用接口选型
你的方法无入参、执行后返回指定类型结果,完全匹配Java 8内置的java.util.function.Supplier<T>函数式接口。
这个接口的唯一抽象方法为T get(),签名特征是零输入参数、返回一个泛型T类型的结果,本身设计定位就是“不需要入参,对外提供一个指定类型的结果”,和你现有infraSelection()方法的行为完全一致。
改造使用方式
你不需要修改原有方法的内部逻辑,如果需要把该方法作为函数式实例传递、适配Java 8的lambda/方法引用场景,直接用方法引用绑定即可:
// 绑定当前实例的infraSelection方法,得到Supplier类型的函数式实例 Supplier<NotificationPage> infraSelectionSupplier = this::infraSelection; // 调用Supplier的get方法,等价于直接执行原infraSelection()逻辑 NotificationPage result = infraSelectionSupplier.get();
如果要保留原有链式调用写法(比如notificationPage.infraSelection().otherMethod()这种流式调用),完全不需要改动原方法的签名,只在需要函数式实例的场景下做方法引用转换即可。
其他常见内置接口排除说明
其余常用内置函数式接口都不匹配你的场景:
Function<T,R>、UnaryOperator<T>:要求至少1个入参,不符合方法无参的特征Consumer<T>、BiConsumer<T,U>:接口方法无返回值,不符合方法返回实例的特征Predicate<T>:要求1个入参且返回值固定为boolean类型,不匹配BiFunction<T,U,R>:要求2个入参,不符合无参要求
内容的提问来源于stack exchange,提问作者mandeep sheoran
相关产品推荐
相关产品推荐

