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

FunctionalInterface中abstract关键字是否用于区分lambda对应的抽象方法?

你的认知是错误的,相关逻辑如下:

核心规则澄清
  • 接口中所有非默认、非静态、无方法体的方法,默认自带public abstract修饰,手动写abstract属于冗余操作,不会改变方法本身的抽象属性,也没有任何特殊标记作用。
  • 函数式接口的唯一判定标准是:接口内有且仅有1个抽象方法(排除继承自java.lang.Object的公共方法、接口默认方法、静态方法),和方法是否手动加了abstract修饰符没有任何关系。
针对你的示例逐一说明
  1. 第一个单方法接口是合法的函数式接口,符合单抽象方法的要求。
public interface AllTrades {
  public boolean checkSalary(ATrade t);
}
  1. 新增第二个抽象方法后,接口已经存在2个抽象方法,无论如何调整修饰符都不可能再成为合法的函数式接口:
public interface AllTrades {
  public boolean checkSalary(ATrade t);
  public boolean checkSalary2(ATrade t);
}
  1. 你给其中一个方法手动加abstract的写法完全不会改变结果,两个方法仍然都是抽象方法,该接口依然不满足函数式接口的要求:
public interface AllTrades {
  abstract public boolean checkSalary(ATrade t);
  public boolean checkSalary2(ATrade t);
}
常见误区补充

函数式接口之所以能绑定Lambda表达式,核心是因为只有一个抽象方法,Lambda的参数、返回值可以和这个唯一的方法自动匹配,根本不存在“多个抽象方法里选一个作为承载”的场景,自然也不需要额外的关键字做标记。如果你给接口加了@FunctionalInterface注解,编译器会主动校验抽象方法数量,上述有2个抽象方法的接口会直接报编译错误。

内容的提问来源于stack exchange,提问作者likejudo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:24:02