С помощью скрипта Groovy (метапрограммирование) я могу получить доступ и изменить переменные, которые объявлены глобально в классе Java.Даже я могу вызвать или переопределить метод Java с помощью сценария.Но я не могу найти какой-либо способ доступа к переменным, которые находятся внутри определенного метода класса.
Рассмотрим класс MethodInjection.java
public class MethodInjection {
static String text = "";
public static void main(String[] args) throws Exception
{
Execute();
}
public static void Execute() throws IOException
{
System.out.println("Before Value : "+text);
String script = loadScript("Path_to_script");
Script scripting = new GroovyShell().parse(script);
scripting.run();
}
public static void print()
{
System.out.println("After Value : "+text);
}
public static void access()
{
String local ="";
}
static String loadScript(String fileName) throws IOException
{
BufferedReader br = new BufferedReader(new FileReader(fileName));
try
{
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null)
{
sb.append(line);
sb.append("\n");
line = br.readLine();
}
return sb.toString();
}
finally
{
br.close();
}
}}
И тот же сценарий:
import methodinjection.MethodInjection
def access = new MethodInjection()
access.text = "Modified"
access.metaClass.access.local = "change"
access.print()
println access.metaClass.access.local
и я получил вывод как
Before Value :
After Value : Modified
groovy.lang.ExpandoMetaClass$ExpandoMetaProperty@75f9ecc
Но мне нужно изменить локальную переменную и распечатать ее через скрипт Groovy.
Пробовал много способов, но не смог найти