Интерфейс Java, AbstractClass и Перечислимое соглашение о присвоении имен

Использование as для отливки делает его немного более читаемым с той же функциональностью.

Func(null as Class1);
30
задан roundcrisis 21 July 2011 в 17:42
поделиться

5 ответов

В Java: Foo , AbstractFoo и Foo - хотя AbstractFoo может быть просто Foo .

Доказательства:

  • java.util.List (интерфейс)
  • java.util.AbstractList (абстрактный класс)
  • java.util.Formatter.BigDecimalLayoutForm (enum)

Информацию об интерфейсе см. В разделе Соглашения об именах документа Java Coding Conventions. Однако здесь не говорится о перечислениях и абстрактных классах.

29
ответ дан 27 November 2019 в 23:20
поделиться

интерфейсы: Foo

Причина: Ваш код не должен знать, что они имеют дело с интерфейсом. Написание «IFoo» делает именно это. Вместо этого Foo дает понять, что «Foo» является универсальным, и стоящий за ним объект может быть «NumFoo» или «StrFoo». Коду действительно не нужно заботиться.

абстрактные классы: AbstractFoo

Причина: ваш код никогда не будет использовать этот класс напрямую. Вы всегда будете создавать подклассы этого класса, чтобы создавать классы, которые используются другим кодом. Таким образом, программисту должно быть ясно, что этот класс является абстрактным. И что лучше назвать абстрактным! В местах, где вам нужно использовать ссылки типа AbstractFoo, вам следует пересмотреть использование интерфейса. (Конечно, в C ++ это невозможно)

Перечисления: FooType или FooEnum. Лично FooType лучше, потому что Type легче соотносится с «реальным миром», чем Enum.

Ура!

18
ответ дан 27 November 2019 в 23:20
поделиться

Мое соглашение:

  • Интерфейс: Foo ;
  • Аннотация: AbstractFoo ;
  • Enum: обычно Foo , но в некоторых случаях FooType .

IFoo очень похож на .Net, а не на Java. FooInterface Я никогда не видел, чтобы его использовали.

2
ответ дан 27 November 2019 в 23:20
поделиться

Никаких специальных соглашений.

Наличие специальных соглашений об именах для этих типов классов по сути является формой венгерской нотации (плохой вид): информация, которую она дает вам, уже присутствует в синтаксисе и обычно становится легко доступным в IDE, например, при наведении курсора на имя. Вводить его в само имя бессмысленно и некрасиво.

Имена классов должны просто как можно лучше описывать роль класса. Это может привести к «естественным» соглашениям об именах - очень хорошим примером является соглашение Java об именах интерфейсов с суффиксом -able (Iterable, Comparable) - но я не хочу представить результат, если он применялись повсеместно, и List, Map и т. д. должны были следовать им.

5
ответ дан 27 November 2019 в 23:20
поделиться

Мое соглашение:

  • интерфейс : Foo
  • abstract : это зависит от FooAdaptor или AbstractFoo или BaseFoo
  • enum : Foo или Foos

Мне очень не нравится использовать I в именах интерфейсов или даже FooInterface:

 interface FooInterface {

это как писать:

 class FooClass {

или даже:

 abstract class AbstractFooClass {

это просто многословно.

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

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