Должны ли быть объявлены методы в интерфейсе Java с модификатором открытого доступа или без него?


Answers

Публичный модификатор должен быть опущен в интерфейсах Java (на мой взгляд).

Поскольку он не добавляет дополнительной информации, он просто отвлекает внимание от важных вещей.

Большинство руководств по стилю рекомендуют вам оставить это, но, конечно же, самое главное - быть последовательным в вашей кодовой базе, и особенно для каждого интерфейса. Следующий пример может смутить кого-то, кто не владеет 100% Java:

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

Должны ли быть объявлены методы в интерфейсе Java с модификатором public доступа или без него?

Технически это не имеет значения, конечно. Метод класса, реализующий interface , всегда является public . Но что такое лучшее соглашение?

Сама Java несовместима в этом. См. Например, Collection vs. Comparable или Future vs. ScriptEngine .




Я бы не стал добавлять модификаторы, которые применяются по умолчанию. Как указывалось, это может привести к несогласованности и путанице.

Худшее, что я видел, это интерфейс с методами, объявленными abstract ...




Я предпочитаю пропускать его, я где-то читал, что интерфейсы по умолчанию являются public и abstract .

К моему удивлению, книга « Head First Design Patterns» использует public с декларацией интерфейса и методами интерфейса ... это заставило меня переосмыслить еще раз, и я приземлился на этом посту.

В любом случае, я думаю, избыточная информация должна быть проигнорирована.




Я всегда пишу, что бы я использовал, если бы не было интерфейса, и я писал прямую реализацию, т. Е. Использовал бы public .




Это абсолютно субъективно. Я опускаю избыточный public модификатор, поскольку он кажется беспорядочным. Как уже упоминалось другими, согласованность является ключом к этому решению.

Интересно отметить, что разработчики языка C # решили обеспечить это. Объявление метода интерфейса как открытого в C # является ошибкой компиляции. Консистенция, вероятно, не важна для разных языков, поэтому я предполагаю, что это не имеет прямого отношения к Java.