You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否以带参数的匿名接口作为方法参数,无需单独定义接口?

不用自定义接口也能实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:56:01