Java: Принудительно принять имя строки в качестве класса? - PullRequest
1 голос
/ 21 октября 2011

Я хочу напечатать оператор следующим образом:

Object SomeObject = new Object("object's name");
System.out.println(SomeObject.name);

, за исключением того, что вместо указания имени объекта в операторе печати, укажите строку, которая ранее была бы объявлена ​​как имя объекта.существующий объект.

Пример:

Object SomeObject = new Object("object's name");
String object_string = "SomeObject";
System.out.println("object_string.name");

Я знаю, что первый пример выведет «имя объекта».Я хочу, чтобы второй сделал то же самое, но с использованием строки.Обратите внимание, что значение строки совпадает с именем объекта.Очевидно, что второй пример не сработает, потому что object_string - это строка, а не объект.

Поэтому мой вопрос заключается в том, могу ли я заставить оператор print принять «object_string» в качестве имени объекта?*

System.out.println("(Object)object_string.name");

Возможно, что-то подобное?

Спасибо

Ответы [ 2 ]

1 голос
/ 21 октября 2011

То, что вы ищете, называется интерполяцией строк (по крайней мере, так называется в Perl, с которым я больше всего знаком), а в Java его нет, извините.Тем не менее, есть некоторые инструменты, построенные поверх Java, которые предлагают аналогичную функциональность в более специализированных случаях использования.Вы, например, можете быть заинтересованы в JSP EL , OGNL или Spring EL .

Обратите внимание, что все этитребует настройки некоторых лесов, и, в частности, объекты, на которые вы ссылаетесь в этих динамических контекстах, должны быть сначала помещены в какую-то карту или другой держатель.Невозможно ссылаться на них напрямую из локальной переменной.

С другой стороны, некоторые другие языки, такие как Groovy, предлагают эту встроенную функцию.

0 голосов
/ 21 октября 2011

Нельзя перейти от String к имени именованной переменной, переменная object_string больше не существует при компиляции в байт-код, и компилятор не может узнать, что «object_string» ссылается на переменную object_string.Это, конечно, если у вас нет сопоставления строки с переменными, которыми вы управляете.

Лучше использовать отражение, чтобы найти имя свойства и напечатать его.

public void printProperty(Class<?> cl, String propertyName) {
   //Use reflection here to look up the propertyName on class cl and print
}

printProperty(Object.class, 'name');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...