Java接口中的方法应该使用或不使用公共访问修饰符来声明?

当然,从技术上讲,这并不重要。实现接口的类方法总是公共的。但是什么是更好的约定呢?

Java本身在这方面并不一致。参见Collection vs. Comparable或Future vs. ScriptEngine。


当前回答

这完全是主观的。我省略了多余的公共修饰符,因为它看起来很杂乱。正如其他人所提到的,一致性是这个决定的关键。

有趣的是,c#语言设计人员决定强制执行这一点。在c#中将接口方法声明为public实际上是一个编译错误。不过,一致性在语言之间可能并不重要,所以我猜这与Java并没有直接关系。

其他回答

我宁愿跳过它,我在某处读到,接口是默认的,公共的和抽象的。

令我惊讶的是,这本名为《Head First Design Patterns》的书使用了公共接口声明和接口方法……这让我再次反思,我找到了这个职位。

无论如何,我认为多余的信息应该被忽略。

JLS明确了这一点:

允许为接口中声明的方法冗余地指定公共和/或抽象修饰符,但出于风格考虑,不建议这样做。

我使用带有公共修饰符的声明方法,因为它使代码更具可读性,特别是语法高亮显示。不过,在我们最新的项目中,我们使用了Checkstyle,它在接口方法上的公共修饰符的默认配置中显示了一个警告,所以我切换到忽略它们。

我不确定什么是最好的,但我不喜欢在接口方法上使用公共抽象。Eclipse在使用“Extract Interface”重构时有时会这样做。

这完全是主观的。我省略了多余的公共修饰符,因为它看起来很杂乱。正如其他人所提到的,一致性是这个决定的关键。

有趣的是,c#语言设计人员决定强制执行这一点。在c#中将接口方法声明为public实际上是一个编译错误。不过,一致性在语言之间可能并不重要,所以我猜这与Java并没有直接关系。

人们将通过IDE或Javadoc中的代码完成来了解您的接口,而不是通过阅读源代码。所以在源代码中加入“公共”是没有意义的——没有人会阅读源代码。