Ответ 1
Из Спецификация языка Java для идентификаторов:
Символ
$
следует использовать только в механически сгенерированном исходном коде или, реже, для доступа к уже существующим именам в устаревших системах.
Символ доллара ($) является допустимым символом для обозначения переменной, например. String superSecretFormula$;
, но когда мы говорим о соглашениях об именах, когда я должен использовать этот символ?
Подчеркивание, например, чаще всего используется для разделения слов, поскольку пробелы не допускаются.
Из Спецификация языка Java для идентификаторов:
Символ
$
следует использовать только в механически сгенерированном исходном коде или, реже, для доступа к уже существующим именам в устаревших системах.
В вашем вопросе отмечена Java, но похоже, что вы спрашиваете о типа символов, которые по-прежнему поддерживаются в Visual Basic, но не широко используется в эти дни (и в течение длительного времени).
Это немного субъективно, но я считаю справедливым сказать: никогда
Один сценарий, в котором вы можете указать префикс имени переменной $
, - это при написании кода JavaScript в отличать объекты jQuery.
Что касается запуска имени переменной с помощью $
, учебники Oracle Java, сообщите нам:
Имя переменной может быть любым юридическим идентификатором - бесконечной последовательностью букв и цифр Юникода, начиная с буквы, знака доллара "
$
" или символа подчеркивания "_
". Однако соглашение состоит в том, чтобы всегда начинать имена переменных с буквы, а не "$
" или "_
".
Теоретически вы можете использовать знак доллара в именах переменных, но он сильно обескуражен, потому что этот символ используется внутренне компилятором (например, имя внутреннего или анонимного классов).
Обратитесь к двум связанным вопросам в stackoverflow: В чем смысл $в имени переменной? и Java имя класса, содержащее знак доллара, не удается скомпилировать, если присутствует внутренний класс
Имя конфликтует с синтетическими полями
Макдауэлл процитировал JLS, вот пример, который не компилируется в Oracle JDK 1.8.0_45 из-за конфликтов имен с искусственными полями:
public class Assert {
static final boolean $assertionsDisabled = false;
public static void main(String[] args) {
assert System.currentTimeMillis() == 0L;
}
}
Проблема в том, что javac
генерирует поле $assertionsDisabled
для реализации assert
, которое конфликтует с нашим полем, а javac
говорит:
the symbol $assertionsDisabled conflicts with a compile synthesized symbol
См. Также: Что делает ключевое слово Java assert и когда его следует использовать?
Я согласен, что в общем случае следует избегать использования специального символа $, как объяснил Ричард. Тем не менее, я помню, как я видел использование $для определения селектора типа jQuery в проекте реактора . Я думаю, что с осторожностью символ $может помочь определить некоторые красивые API-интерфейсы в Java.
В Java я использую "_" в качестве префикса для нестатической переменной или полях частного класса, а "$" - как префикс для статической переменной частного класса.
Лучше, чем использовать префикс "m", поскольку он не блокирует строку чтения. Вы, очевидно, не стали бы читать "_" или "$", когда вы начнете читать переменное слово, верно? Как _addressMap или $addressMap, но с m, как в Map mAddressMap, это может сбивать с толку в момент, когда вы начинаете его читать.
Несмотря на то, что это не обычный Java-код, очень полезно отметить эту переменную, чтобы вы могли быстро их понять, если они являются общими или нет, или статическими или нестатическими. Конечно, вы должны обсудить это со своим товарищем по команде из первых рук.