Подтвердить что ты не робот

Интерфейс Java Interface, AbstractClass и Enum

Мы обсуждаем эту команду в нашей команде о кодовых соглашениях для Java для:

  • interface: Foo или IFoo или FooInterface?

  • abstract: Foo или AbstractFoo?

  • Enums: Foo или FooEnum?

Я в основном пытаюсь отложить свои личные предпочтения:) поэтому очень хотелось бы найти причины для поддержки того или иного соглашения.

4b9b3361

Ответ 1

В Java: Foo, AbstractFoo и Foo - хотя AbstractFoo может быть только Foo.

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

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

Для части интерфейса см. раздел Соглашения об именах в документе "Соглашения о кодировании Java". Однако он не говорит об переписках и абстрактных классах.

Ответ 2

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

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

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

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

Перечисления: FooType или FooEnum. Лично FooType лучше, потому что Type более легко относится к "реальному миру", который делает Enum.

Ура!

Ответ 3

Из моего блога:

  • Foo. Интерфейс в конечном итоге определяет концепцию, поэтому он должен иметь лучшее имя.
  • AbstractFoo. Абстрактная реализация, предназначенная для использования в качестве основы иерархии классов.
  • BaseFoo - реализация, предназначенная для использования в качестве основы иерархии классов, где базовый класс может использоваться сам по себе, если необходимо.
  • DefaultFoo - реализация по умолчанию, которая подходит для большинства типичных случаев использования.
  • SimpleFoo - "простая" реализация без неожиданных функций, возможно, как пример или как макет. Простое POJO было бы хорошей "простой" реализацией.
  • {Описательный} Foo. Другие реализации должны описывать, что делает их уникальными.

В блоге также обсуждаются причины против некоторых других имен.

Ответ 4

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

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

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

Ответ 5

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

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

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

 interface FooInterface {

похоже на запись:

 class FooClass {

или даже:

 abstract class AbstractFooClass {

это просто умножение.

Ответ 6

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

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

IFoo - это очень .Net, а не Java. FooInterface Я никогда не видел.

Ответ 7

Относительно интерфейсов, которые мне нравятся:

Fooable

Ответ 8

О интерфейсах:

Я предпочитаю IFoo, потому что его разговорное имя, сообщая вам, что это сразу. Во-вторых, для модулей и т.д., Где вы выполняете интерфейс только для одного класса, класс часто имеет то же имя, что и интерфейс. Затем вы можете использовать Foo extends IFoo. В противном случае, вам нужно найти имя. Или используйте FooInterface или что-то еще...

java.util.list, как указано, использует Foo. Это не проблема, так как классы с различными концепциями реализуют его, тем самым предлагая другое имя (ArrayList, LinkedList...). Я не совсем уверен, действительно ли я предпочел бы там IList. Не знаю...: P

Ответ 9

Здесь convetion используется в моей команде DEV в ION.

Интерфейс

interface IMyInterface

::::::::::::::::::::::::::::::::::::::

abstract class MyAbstract

::::::::::::::::::::::::::::::::::::::

enum EMyEnumeration

::::::::::::::::::::::::::::::::::::::