必须加@FunctionalInterface注解,它是编译期强制校验开关,确保接口有且仅有一个抽象方法;接口需为interface声明,default和static方法不计入抽象方法数。
直接在接口声明前加上 @FunctionalInterface 注解即可,这是最核心、最有效的检查手段。
这个注解不是可选的装饰,而是编译期强制校验开关:
@Override 类似,不改变运行行为,只增强开发阶段的安全性注解只是“守门员”,前提是接口本身结构合法:
interface 声明,不能是 class 或 abstract classdefault 或 static 修饰的方法)default 方法、static 方法、Object 继承的方法(如 toString())都不算抽象方法,可任意添加加了注解却编译不过?多半是以下情况:
立即学习“Java免费学习笔记(深入)”;
default 方法当成抽象方法删掉 → 结果剩下 0 个抽象方法 → 补回一个抽象方法即可default
一个安全、可直接用于 Lambda 的自定义函数式接口:
@FunctionalInterface<br>public interface StringProcessor {<br> // 唯一抽象方法<br> String process(String input);<br><br> // default 方法不影响函数式接口性质<br> default boolean isEmpty(String s) {<br> return s == null || s.trim().isEmpty();<br> }<br><br> // static 方法也不计入<br> static String toUpperCase(String s) {<br> return s != null ? s.toUpperCase() : null;<br> }<br>}