我试图让我的程序的用户重命名类和类中的方法。新的名称可以在运行时读取和配置,它们将使用Java Script Engine在脚本语言中调用这些类和方法。我需要一种方法将它们的新名称绑定到类和方法的真实名称。我一直在看反射,但我不认为这可以提供我所需要的能力,或者这是可能的吗?
,
public class RealName {
public void printHello() {
System.out.println("Hello");
}
}
然后在python中输入
obj = new NewName()
obj.hello()
如果这是不可能的,请告诉我! 不能更改方法名,但可以将对象的实例绑定到给定的名称,并将其注入脚本语言的上下文中。
这只适用于类的实例,不适用于实例化新实例。
如果你真的想这样做,你可以在目标脚本语言中生成具有新名称和方法名称的子类,并将它们注入到上下文中,以获得你想要的效果。
说了这么多,我实在想不出一个好的理由来做这些。
回答我的问题,从我发现没有,你不能使用反射绑定一个类的新名称。事实上,我发现动态重命名没有简单的方法。
我所做的是克服这是写代码从一个字符串到一个文件,保存该文件扩展名.java
,编译该文件,然后使用反射或更好地使用它使用Java ScriptEngine API的脚本内(这样你可以避免丑陋的反射代码,实际上有一切动态和飞行)。
这是创建文件的起点,
动态内存编译
这里是Java脚本,
Java脚本