【发布时间】:2023-03-26 13:37:01
【问题描述】:
在浏览java 1.8的java.util.Collections接口源码时,我注意到了这一点,
default boolean removeIf(Predicate<? super E> filter)
{
....
}
从 1.8 开始,java 允许接口中的方法定义主体。但是有一些语义上的特殊性;如果该方法是公开的,我也需要将其明确提及为静态,这是可以理解的,但为什么默认情况下不强制执行?事实上,用默认值指定静态会产生错误。这有什么用?
编辑:看到不赞成票的数量,我建议您先尝试一下,然后再难以置信地得出结论
【问题讨论】:
-
如果方法是公开的,我需要明确提及它也是静态的你确定吗?
-
是的,我得到一个错误“接口抽象方法不能有主体”
-
您没有使用 Java 8 进行编译。
default方法不能是static。default方法隐式为public。 -
接口中的所有方法声明,包括默认方法,都是隐式公开的没有提及静态。
-
@SotiriosDelimanolis 您在第 9.5 节中引用的第二条 JLS 适用于 成员类型,即嵌套类和接口,这与这里讨论的不同。 9.4 节的引用当然是相关的。
标签: java java-8 default-method