Создайте строку с результатом выражения и выражением, которое породило значение. Является ли это возможным? - PullRequest
2 голосов
/ 30 апреля 2010

Как

String r = SomeThing.toExecString("new Object().toString()");

И при выполнении значение r будет:

"new Object().toString() = java.lang.Object@c5e3974"

Возможно ли это вообще? Нужна ли куча размышлений? Может быть, встроенный компилятор?

Ответы [ 3 ]

2 голосов
/ 30 апреля 2010
ScriptEngine engine = new ScriptEngineManager().getEngineByName("beanshell");
Object result = engine.eval("new Object().toString();");
System.out.println(result);

Вы можете приблизиться к тому, что хотите, используя BeanShell. Я запустил приведенный выше код с Java 6 с BeanShell 2.0b4 и движком bsh-engine.jar на основе JSR 223 на пути к классам.

1 голос
/ 30 апреля 2010

Здесь есть отличный пост: Генерация статических прокси-классов - http://www.javaspecialists.eu/archive/Issue180.html

Часть первая достаточно для того, что вы спросили, я думаю

0 голосов
/ 30 апреля 2010

Не знаю, действительно ли ты этого хотел. Но ваша проблема будет решена с помощью этого метода:

String toExecString( String code ) {
    return String.format( 
        "\"%s\" = %s@%x", 
        code, 
        code.getClass().getName(), 
        code.hashCode() 
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...