Java / Ruby: есть ли способ сделать .constantize или Object.send () в Java? - PullRequest
1 голос
/ 11 ноября 2010

В Ruby вы можете сделать "var1".constantize, чтобы получить действительную переменную var1. В Ruby также есть Model.Send («имя метода, параметры могут быть здесь и т. Д.»), И это будет то же самое, что фактически вызов этого метода.

То, что я хочу сделать ... это ... довольно сложно ... Я хочу, чтобы строка "var1 == var2" была преобразована в фактические переменные в моем Java-приложении, а затем оценена.

Есть ли способ сделать это?

Ответы [ 3 ]

2 голосов
/ 11 ноября 2010

В Java подобное поведение достигается с помощью API Reflection.Однако, поскольку Java является компилируемым языком, информация о локальных переменных (внутри методов, конструкторов, параметров и т. Д.) Стирается при компиляции.Однако у вас по-прежнему есть полный доступ к именам классов, иерархиям, методам и полям (переменным класса).
Хорошей отправной точкой является учебное пособие по Reflection API или метод getClass () объекта.

2 голосов
/ 11 ноября 2010

Рассматривали ли вы использование JRuby ?

Что касается ваших вопросов:

  1. Нет равных, которые позволили бы использовать синтаксис типа eval, гдеВы можете передать строку и преобразовать ее в код на Java.Вы можете делать что-то вроде Class.forName для загрузки определенного класса из String, но это не то, что вы ищете.
  2. Вы можете использовать API отражения Java для динамического вызова методов вclass Проверьте Jakarta Commons BeanUtils на некоторые вспомогательные методы, которые могут помочь.
0 голосов
/ 11 ноября 2010

В Java, если вам нужен динамический поиск переменных, вы обычно помещаете их в карту, а поиск использует ключи этой карты.

Можете ли вы объяснить, что вы пытаетесь сделать более подробно,Я подозреваю, что то, что вы пытаетесь сделать, может быть сделано в Java просто по-другому.

...