gpt4 book ai didi

java - 在运行时动态修改类(向方法发送参数并返回)JAVA

转载 作者:太空宇宙 更新时间:2023-11-04 12:32:21 25 4
gpt4 key购买 nike

我试图在程序调试时修改一个类。但不仅如此,我想创建一个方法如何接收字符串参数,并返回该字符串,我完全不理解代码。

这是程序调试时修改类的方法,并且有效:

File sourceFile = new File("/Users/fpradines/Documents/AutoBot/src/main/java/Hello.java");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(
null, null, null);

try {
fileManager.setLocation(StandardLocation.CLASS_OUTPUT, Arrays
.asList(new File("/Users/fpradines/Documents/AutoBot/src/main/")));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Compile the file
boolean success = compiler.getTask(null, fileManager, null, null, null,
fileManager.getJavaFileObjectsFromFiles(Arrays.asList(sourceFile)))
.call();
try {
fileManager.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


runIt();

这是 runIt 方法,它仅在不需要返回任何内容并且我没有发送参数时才有效:

@SuppressWarnings("unchecked")
public static void runIt() {
try {
Class<?> params[] = {};
Object paramsObj[] = {};
Class<?> thisClass = Class.forName("Hello");
Object iClass = thisClass.newInstance();
Method thisMethod = thisClass.getDeclaredMethod("algo", params);
thisMethod.invoke(iClass, paramsObj);
} catch (Exception e) {
e.printStackTrace();
}
}

正在修改的类是这样的:

public class Hello {
public String algo(String value){
System.out.println("Hello worlds");
value = "hello";
return value;
}

}

我想向我的 Hello 类发送一个字符串参数,就像我所做的那样,然后我希望该类在调用函数 runIt() 时返回该值;我不知道如何发送参数,也不知道如何捕获返回

我在想这样的事情:String value = thisMethod.invoke(iClass, paramsObj);

但不工作

欢迎任何想法,谢谢!

最佳答案

这就是它的工作原理。

你的参数应该有类型列表。

例如,如果您的方法采用两个参数,则参数应该是字符串和整数

Class<?> params[] = {Class.forName("java.lang.String"),Class.forName("java.lang.Integer")};

您的 paramsObj 应该是您要发送的实际对象数组。

Object paramsObj[] = {"Testing", new Integer(1)};

在您的情况下,下面的代码应该可以工作

    Class<?> params[] = {Class.forName("java.lang.String")};
Object paramsObj[] = {"Testing"};
Class<?> thisClass = Class.forName("Hello");
Object iClass = thisClass.newInstance();
Method thisMethod = thisClass.getDeclaredMethod("algo", params);
Object str= thisMethod.invoke(iClass, paramsObj);
System.out.println(str);

关于java - 在运行时动态修改类(向方法发送参数并返回)JAVA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37714334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com