首页 > 解决方案 > 爪哇。如何防止将方法引用分配给功能接口类型参数?

问题描述

从 Java SE 8 开始,如果方法的形式参数是函数式接口,则参数可以是实现该接口的对象或对某个方法的引用。这意味着参数也可以是对与接口目的逻辑上不相关的方法的引用。是否可以强制参数仅是实现接口的对象,而不是方法引用?尽管可以通过添加第二个抽象方法使接口不起作用,但仍应实现该附加方法。还有其他方法吗?

标签: javamethod-referencefunctional-interface

解决方案


是否可以强制参数仅是实现接口的对象,而不是方法引用?

那没有。

尽管可以通过添加第二个抽象方法使接口不起作用,但仍应实现该附加方法。还有其他方法吗?

确实,这就是这样做的缺点。您不能提供default实现,因为恰好具有 1 个非默认方法的接口被视为 FunctionalInterface,并且您不能规定它不是这样。

但是,您可以做的是将该接口转换为抽象类,该类不适合以 lambda/methodref 形式提供。

更一般地说,不要与 java 特性作斗争。如果有人使用方法 ref,他们就知道自己在做什么。或者他们不这样做,但如果他们只是在毫无头绪的情况下磕磕绊绊,相信我,你无法阻止一个白痴通过设计好的 API 和添加你设法收集的每个 linter 规则来破坏代码库。白痴有创造力了,不能被凡人阻止。


推荐阅读