Действительно, хотя доллар вполне законный символ в идентификаторе, по соглашению, он зарезервирован для сгенерированого кода (в частности, самим javac), поэтому стоит избегать его использования в «ваших» именах. Чтобы не поймать конфликт имен. Но это не строгий запрет.
Некоторые кодогенераторные фрэймворки используют $ для своих «искусственных» переменных/методов. Например, так делает Lombok.
Не используйте $, если у вас нет веской на то причины.
Здесь причина: 1) максимально сократить код и 2) ввести как будто бы новую синтаксическую конструкцию.
Либо я чего-то сильно не понимаю, либо Java 8 принципиально здесь ничего не меняет. Другой синтаксис но от динамических прокси, чтобы вытащить имена свойств, никуда не уйти.
Здесь, видимо, имеется ввиду возможность C# (я — нуб в C# :-) получать из лямбды Expression trees, а ходить по ним в рантайме. Но лямбды Java так не работают, если не углубятся в тонкости, это скорее лаконичный синтаксис создания анонимных классов (и да простят меня за эти слова создатели лямбд Java).
А на счет изящности — это спорный вопрос (смотри коммент выше).
Действительно, хотя доллар вполне законный символ в идентификаторе, по соглашению, он зарезервирован для сгенерированого кода (в частности, самим javac), поэтому стоит избегать его использования в «ваших» именах. Чтобы не поймать конфликт имен. Но это не строгий запрет.
Некоторые кодогенераторные фрэймворки используют $ для своих «искусственных» переменных/методов. Например, так делает Lombok.
Не используйте $, если у вас нет веской на то причины.
Здесь причина: 1) максимально сократить код и 2) ввести как будто бы новую синтаксическую конструкцию.
Здесь, видимо, имеется ввиду возможность C# (я — нуб в C# :-) получать из лямбды Expression trees, а ходить по ним в рантайме. Но лямбды Java так не работают, если не углубятся в тонкости, это скорее лаконичный синтаксис создания анонимных классов (и да простят меня за эти слова создатели лямбд Java).
А на счет изящности — это спорный вопрос (смотри коммент выше).
Но, к сожалению, громоздкий синтаксис (prior to Java 8) губит всю идею.
Лямбды восьмой Джавы здесь могут помочь (укоротить синтаксис, в реализации они ничего не меняют), но не сильно.
Сравните:
и
Все равно громоздко. К тому же, у нас была задача использовать это в уже существующих проектах (не Java 8).
Правда у лямбд здесь есть неоспоримое преимущество, они позволяют захватить типизацию «рута»:
А это уже повод задуматься о том чтобы реализовать такой синтаксис в следующей версии.