Можете ли вы попробовать:
def var = Eval.me( 'new Date()' )
Вместо первой строки в вашем примере.
Класс Eval задокументирован здесь
редактировать
Я предполагаю (из вашего обновленного вопроса), что у вас есть переменная person, а затем люди передают строку типа person.lName
, и вы хотите вернуть свойство lName
этого класса?
Можете ли вы попробовать что-то подобное с помощью GroovyShell?
// Assuming we have a Person class
class Person {
String fName
String lName
}
// And a variable 'person' stored in the binding of the script
person = new Person( fName:'tim', lName:'yates' )
// And given a command string to execute
def commandString = 'person.lName'
GroovyShell shell = new GroovyShell( binding )
def result = shell.evaluate( commandString )
Или это, используя прямой разбор строк и доступ к свойству
// Assuming we have a Person class
class Person {
String fName
String lName
}
// And a variable 'person' stored in the binding of the script
person = new Person( fName:'tim', lName:'yates' )
// And given a command string to execute
def commandString = 'person.lName'
// Split the command string into a list based on '.', and inject starting with null
def result = commandString.split( /\./ ).inject( null ) { curr, prop ->
// if curr is null, then return the property from the binding
// Otherwise try to get the given property from the curr object
curr?."$prop" ?: binding[ prop ]
}