Возможно ли иметь литералы «метод / поле», сравнимые с литералами класса в Java / Scala? - PullRequest
4 голосов
/ 14 сентября 2011

Java Foo.class, а также буквенный синтаксис класса Scala classOf[Foo] возвращают отражающее представление о рассматриваемом классе.

Возможно ли и имеет ли смысл предоставить что-то вроде .method/.field или methodOf[] / fieldOf[] для получения сопоставимого отражающего доступа к методам и полям?

Как бы что-то подобное было реализовано в Java / Scala?

В случае с Java я бы предположил, чтопотребовалось бы либо изменение языка (очень маловероятно), либо какое-то волшебство с помощью инструментов байт-кода / AspectJ, тогда как в Scala это, вероятно, можно реализовать с неявным преобразованием.

Ответы [ 2 ]

8 голосов
/ 14 сентября 2011

Да и нет. Пол Филипс, безусловно, проявил интерес к такой вещи, и в настоящее время в туловище происходит много работы вокруг предстоящих отражений в скале.

Сомнительно, что мы увидим что-то похожее на предложенный вами синтаксис. Методы не являются первоклассной конструкцией и, как таковые, на них можно ссылаться только через содержащий их класс. Но у нас будет хороший, удобный для скалы способ доступа к членам с помощью отражения, включая параметры по умолчанию, имена параметров и т. Д.

2 голосов
/ 14 сентября 2011

Я не помню, где, но я недавно наткнулся на библиотеку Java, которая будет принимать классы Java в качестве входных данных и генерировать метакласс, так сказать, со статическими полями (я думаю), которые были ссылками на все поляи методы на целевом классе.Это, конечно, не так элегантно, как то, что вы ищете, но оно показалось мне потенциально полезным волшебством.

...