能否以带参数的匿名接口作为方法参数,无需单独定义接口?
不用自定义接口也能实现Lambda调用的方案
你完全不需要专门写那个只用一次的Interf接口,JDK已经给你准备好了现成的函数式接口,直接用就行。
1. 用JDK内置的Consumer<String>替代自定义接口
你的Interf是个只接收String参数、没有返回值的单方法接口,刚好和JDK自带的java.util.function.Consumer接口匹配——它的抽象方法accept(T t)就是接收一个参数、无返回值的逻辑。直接改方法定义就行:
import java.util.function.Consumer; public void method1(String a, Consumer<String> b) { b.accept(a); // 这里调用accept方法,替代原来的run }
调用的时候Lambda写法和你原来的几乎一样,还不用依赖自己写的接口:
method1("Hello World", z -> { System.out.println(z); });
2. 为什么你设想的“匿名接口定义”行不通?
Java语法里不允许在方法参数里直接定义匿名接口类型,也就是你写的? interface(String z) b这种写法是不符合语法规范的。但JDK已经覆盖了绝大多数常见的函数式场景,除了Consumer,还有这些常用内置接口:
Function<T,R>:接收T类型参数,返回R类型结果Predicate<T>:接收T类型参数,返回布尔值Supplier<T>:无参数,返回T类型结果
这些都在java.util.function包下,直接导入用就完事。
3. 特殊参数场景也有对应接口
要是你需要的是带多个参数的逻辑,比如两个参数无返回,JDK也有BiConsumer<T,U>这种接口,同样不用自己写自定义接口。
内容的提问来源于stack exchange,提问作者Tyrone Annor
相关产品推荐
相关产品推荐

