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

时间:2020-03-06 15:01:06  来源:igfitidea点击:

Java接口中的方法是否应使用" public"访问修饰符声明或者不使用" public"访问修饰符?

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

Java本身在这方面并不一致。例如,参见"集合"与"可比较",或者"未来"与" ScriptEngine"。

解决方案

我总是写我在没有接口的情况下会使用的东西,而我正在写一个直接的实现,即我将使用" public"。

我认为Java接口中应该省略public修饰符。

由于它不会添加任何额外的信息,因此只会引起人们对重要内容的注意。

大多数样式指南都建议我们不要使用它,但是,当然,最重要的是在整个代码库中保持一致,尤其是对于每个接口而言。下面的示例很容易使不是100%熟练使用Java的人感到困惑:

public interface Foo{
  public void MakeFoo();
  void PerformBar();
}

我会避免放置默认情况下应用的修饰符。如前所述,它可能导致不一致和混乱。

我看到的最糟糕的是带有声明为"抽象"方法的接口。

这完全是主观的。我忽略了多余的" public"修饰符,因为它看起来很混乱。正如其他人所提到的,一致性是做出此决定的关键。

有趣的是,语言设计师决定强制执行此操作。在Cis中将接口方法声明为public实际上是编译错误。但是,跨语言的一致性可能并不重要,因此我想这与Java并没有直接的关系。

我在声明方法中使用了public修饰符,因为它使代码更具可读性,尤其是在语法高亮显示的情况下。不过,在我们最新的项目中,我们使用Checkstyle,它在接口方法的public修饰符的默认配置下显示了一条警告,因此我切换为忽略它们。

所以我不确定什么是最好的,但是我不喜欢的一件事是在接口方法上使用" public abstract"。 Eclipse在使用"提取接口"进行重构时有时会这样做。

JLS明确指出:

It is permitted, but discouraged as a matter of style, to redundantly specify the public and/or abstract modifier for a method declared in an interface.

我更喜欢跳过它,我在某处读到默认情况下接口为public和abstract。

令我惊讶的是,《 Head First Design Patterns》一书正在将" public"与接口声明和接口方法结合使用……这让我再次进行了重新思考,我登上了这篇文章。

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