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

Я хотел бы указать, что нет такой вещи, как инициализация двойной скобки. Существует только обычный традиционный блок инициализации брекетов. Второй блок фигурных скобок не имеет ничего общего с инициализацией. Ответы говорят, что эти две фигурные скобки инициализируют что-то, но это не так.

Во-вторых, почти все ответы говорят о том, что это используется при создании анонимных внутренних классов. Я думаю, что люди, читающие эти ответы, получат впечатление, что это используется только при создании анонимных внутренних классов. Но он используется во всех классах. Чтение этих ответов - это какое-то новое особое будущее, посвященное анонимным классам, и я думаю, что это вводит в заблуждение.

. Идем дальше, этот вопрос говорит о ситуации, когда вторая открывающая скобка находится сразу после первого открытия скобки. Обычно в обычном классе есть некоторый код между двумя фигурными скобками, но это абсолютно одно и то же. Так что это вопрос размещения скобок. Поэтому я думаю, что мы не должны говорить, что это какая-то новая захватывающая вещь, потому что это то, что мы все знаем, но просто написано с некоторым кодом между скобками. Мы не должны создавать новую концепцию, называемую «инициализация двойной скобки».

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

Кроме того, мы не должны говорить о проблеме, созданной используя эту несуществующую вещь «инициализацию двойной скобки» или даже обычную инициализацию одной скобки, поскольку описанные проблемы существуют только из-за создания анонимного класса, поэтому он не имеет ничего общего с исходным вопросом. Но все ответы дают читателям впечатление, что это не вина в создании анонимных классов, а эта злая (несуществующая) вещь, называемая «инициализация двойной скобки».

284
задан Edward Brey 25 October 2013 в 10:23
поделиться

7 ответов

JLS ясно дает понять это:

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

327
ответ дан Pang 23 November 2019 в 01:52
поделиться

Общедоступный модификатор должен быть опущен в интерфейсах Java (по-моему).

, Так как это не добавляет дополнительной информации, это просто привлекает внимание далеко от важного материала.

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

public interface Foo{
  public void MakeFoo();
  void PerformBar();
}
41
ответ дан Rasmus Faber 23 November 2019 в 01:52
поделиться

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

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

5
ответ дан PhiLho 23 November 2019 в 01:52
поделиться

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

, Таким образом, я не действительно уверен, что является лучшим, но одна вещь, которую я действительно не люблю, использует public abstract на методах интерфейса. Eclipse иногда делает это при рефакторинге с "Интерфейсом Извлечения".

5
ответ дан cretzel 23 November 2019 в 01:52
поделиться

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

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

1
ответ дан RustyTheBoyRobot 23 November 2019 в 01:52
поделиться

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

4
ответ дан JeeBee 23 November 2019 в 01:52
поделиться

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

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

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

3
ответ дан 23 November 2019 в 01:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: