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

Вкладывая капитал "я" перед интерфейсами JAVA

Много лет назад, когда я был в университете, они заявили, что должны поставить капитал я (I) перед интерфейсами. Это все еще соглашение, потому что я вижу много интерфейсов, которые не следуют этому.

4b9b3361

Ответ 1

Нет, это не конвенция. По крайней мере, это не входит в JDK. Тем не менее, если в вашем магазине есть это соглашение, хотя это может быть не практика снаружи, я бы предложил вам последовать этому примеру. Сохранение последовательности в команде более важно в отношении конвенций.

Ответ 2

Это обычно не выполняется на Java - это С#/. NET.

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

Ответ 3

Использование префикса "I" на интерфейсах - это то, что было создано COM (.NET просто унаследовал это соглашение) и не стандарт в Java. Посмотрите на любой JDK или другой код, разработанный Sun, и вы не увидите префикс I. И это не только Sun, большинство проектов Java не используют префикс I. В отличие от Java-стандарта, префикс я является аберрацией, принятой в некоторых уголках мира Java.

Ответ 4

Он использовал довольно много в Eclipse Framework. Это зависит от индивидуальных стилей проекта, но это не стандартное соглашение. Тем не менее, это, безусловно, может помочь в обслуживании кода и поиске в некоторых случаях.

Ответ 5

Я хотел бы упомянуть, что по-другому, реальная реализация интерфейса, вы можете найти постфикс Impl или целый пакет имен impl (пример).

Но это вообще не стандарт.

Ответ 6

В Java соглашение состоит в том, чтобы попытаться закончить ваши интерфейсы в "способных". Serializable, Cloneable и т.д. В .NET они начинаются с "I".

Я придерживаюсь подхода, который является стандартным для вашего языка (т.е. "способным" расширением). Я не согласен с Software Monkey, что он "утечки информации, которая не должна быть утечка". Это прекрасно, чтобы иметь имя, которое указывает на то, что это такое, ИМХО.

Ответ 7

Это знакомое соглашение о программировании, но его распространенность зависит от API. Например, обычно не следует стандартная библиотека Java, где такие вещи, как коллекции, являются интерфейсами, но называются их математическими понятиями. С другой стороны, некоторые важные API, такие как Eclipse, используют его последовательно.

Один аргумент, который я слышал от использования префикса, состоит в том, что по существу проблема языковой проблемы (то есть, двумерность интерфейсов и классов) в схеме именования. Другое дело, что "все в публичном API должно быть интерфейсом, а не классом в любом случае". Поскольку многие классы, реализующие интерфейс, называются "XImpl", можно утверждать, что это может быть излишним. Однако использование префикса может иметь смысл, если тип является всего лишь маркером.

Ответ 8

Я бы не рекомендовал его использовать. Вы никогда не знаете, станет ли ваш интерфейс однодневным абстрактным классом. Тогда вам придется переименовывать каждое отдельное приложение или просто придерживаться уродливого абстрактного класса с префиксом.

(Источник: Robert C. Martin - Agile Software Development: принципы, шаблоны и практика)

Ответ 9

Такой стиль кодирования называется венгерской нотацией, потому что он был изобретен Чарльзом Симони в Microsoft, который, случается, венгерский. Целью Венгерской нотации является кодирование семантической информации, которая не может быть выражена внутри системы типов в именах идентификаторов.

Однако система типа Java отлично умеет различать интерфейсы (просто попробуйте extend один с классом), абстрактные классы (просто попробуйте создать экземпляр) и классы (просто попробуйте implement one) и поэтому большинство IDE. Таким образом, использование Венгерской нотации таким образом совершенно бесполезно.

Это никогда не было конвенцией, насколько я знаю, и это, безусловно, не сейчас. По крайней мере, в сообществе Java. (Есть некоторые Java-проекты, которые его используют, но иногда они также используются в С++, но там это имеет смысл, потому что в С++ нет такой вещи, как интерфейс, поэтому у вас должен быть способ отметить их. также используемый в CLI, где он не имеет абсолютно никакого смысла по той же причине, что и в Java.)

Ответ 10

Это, безусловно, соглашение .NET, и Microsoft делает это со своими собственными интерфейсами в библиотеке базового класса .NET. Это было соглашение Java, когда я делал Java, и не могу представить, что он изменился, хотя я не устарел от Java.

Как и в С++, мы также всегда использовали префикс с именем "I", и мы всегда использовали префикс классов с "C". Мы не переносили это соглашение "C" на .NET.

Ответ 11

Я, ошибаюсь, не люблю такого рода вещи. Я работал с одним продуктом Java, который сделал это, и это было безумным.

В конечном счете такая штука датируется FORTRAN-I в 1950-х годах, когда я, J, K,... до тех пор, пока я не забыл, где было автоматически целое число, а остальная часть алфавита была реалом (с плавающей запятой).