В некоторых интерфейсах, которые я написал, я хотел бы называть параметры универсального типа более чем одним символом, чтобы сделать код более читабельным.
Что-то вроде....
Map<Key,Value>
Вместо этого...
Map<K,V>
Но когда дело доходит до методов, параметры типа выглядят как java-классы, что тоже сбивает с толку.
public void put(Key key, Value value)
Похоже, что Key и Value - это классы. Я нашел или придумал некоторые обозначения, но ничего похожего на соглашение от Sun или общий передовой опыт.
Альтернативы я угадал или нашел ...
Map<KEY,VALUE>
Map<TKey,TValue>
java
generics
naming-conventions
chaper29
источник
источник
Ответы:
Oracle рекомендует следующее в Руководстве по Java> Generics> Generic Types :
Я бы придерживался его, чтобы избежать путаницы среди разработчиков и возможных сопровождающих.
источник
R
для результата иA
для аккумулятора.Element
inList<Element>
параметризованным типом или классом?BiFunction<T, U, R>
это следует этому соглашению. Если бы это было так, то было быBiFunction<T, S, R>
.Append
Type
Хорошее обсуждение можно найти в комментариях на странице DZone, Соглашения об именах для параметризованных типов .
См. Комментарий Эрвина Мюллера. Его предложение имеет для меня совершенно очевидный смысл: добавить слово
Type
.Назовите яблоко яблоком, машину машиной. Рассматриваемое имя - это имя типа данных, верно? (В ООП класс по существу определяет новый тип данных.) Назовите его «Тип».
Пример Мюллера, взятый из исходной статьи:
Append
T
Повторяющийся вопрос дает ответ Энди Томаса. Обратите внимание на отрывок из руководства по стилю Google, в котором предлагается, чтобы имя многосимвольного типа заканчивалось одной заглавной буквой
T
.источник
Причина, по которой официальное соглашение об именах рекомендует использовать одну букву, заключается в следующем:
Я думаю, что с современными IDE эта причина больше не действует, например. IntelliJ Idea показывает параметры универсального типа разными цветами, чем обычные классы.
Код с универсальным типом, как показано в IntelliJ Idea 2016.1
Из-за этого различия я использую более длинные описательные имена для своих универсальных типов с тем же соглашением, что и обычные типы. Я избегаю добавления префиксов и суффиксов, таких как T или Type, поскольку считаю их ненужным шумом и больше не нужным для визуального различения общих типов.
Примечание. Поскольку я не являюсь пользователем Eclipse или Netbeans, я не знаю, предлагают ли они аналогичную функцию.
источник
Да, вы можете использовать многосимвольные имена для переменных типа, если они четко отличаются от имен классов.
Это отличается от соглашения, предложенного Sun с введением дженериков в 2004 году. Однако:
читабельность
Читаемость хорошая.
Для сравнения:
чтобы:
или, согласно многосимвольному соглашению Google:
Стиль Google
Руководство по стилю Google Java допускает как однобуквенные, так и многосимвольные имена класса, заканчивающиеся на T.
вопросы
Односимвольные имена - не единственный способ отличить параметры типа от имен классов, как мы видели выше.
Верно, что
@param
элементы JavaDoc могут содержать более подробное описание. Но также верно и то, что JavaDocs не обязательно видимы. (Например, в Eclipse есть помощник по содержанию, который показывает имена параметров типа.)Многие оригинальные соглашения Sun почти повсеместно соблюдаются в программировании на Java.
Однако этого конкретного соглашения нет.
Лучший выбор среди конкурирующих конвенций - это вопрос личного мнения. Последствия выбора соглашения, отличного от Oracle, в этом случае незначительны. Вы и ваша команда можете выбрать соглашение, которое наилучшим образом соответствует вашим потребностям.
источник
Вы можете использовать javadoc, чтобы хотя бы дать подсказку пользователям вашего универсального класса. Мне все еще это не нравится (я согласен с @ chaper29), но документы помогают.
например,
Еще я, как известно, использовал свою IDE для рефакторинга класса, нарушая соглашение. Затем поработайте над кодом и вернитесь к одинарным буквам. В любом случае мне будет легче, если используется много параметров типа.
источник