反射可以将类绑定到新名称吗?

时间:2014-06-25 13:25:56

标签: java reflection binding scriptengine

我试图让我的程序的用户重命名类中的类和方法。可以在运行时读入和配置新名称,并使用Java Script Engine以脚本语言调用这些类和方法。我需要一种方法将它们的新名称绑定到类和方法的真实名称。我一直在寻找反思,但我不认为这可以为我提供我需要的能力,或者这甚至可能吗?

例如:

public class RealName {
    public void printHello() {
        System.out.println("Hello");
    }
}

然后也许在Paython中说

obj = new NewName()
obj.hello()

请告诉我这是不可能的!

2 个答案:

答案 0 :(得分:1)

您无法更改方法名称,但可以将对象的实例绑定到给定名称,并将其注入脚本语言的上下文中。

这只适用于该类的实例,而不适用于实例化新实例。

如果您真的想要这个,您可以使用目标脚本语言中的新名称和方法名称生成子类,并将它们注入上下文以获得您正在寻找的效果。

说完所有这些我无法真正想出任何这个。

答案 1 :(得分:0)

要从我发现的内容中回答我的问题,不能使用反射将类绑定到新名称。事实上,我发现没有简单的方法来进行动态重命名。

我为克服这个问题所做的是将代码从字符串写入文件,保存扩展名为.java的文件,编译该文件,然后使用反射或更好地使用它在脚本中使用Java ScriptEngine API(通过这种方式,您可以避免使用丑陋的反射代码并实际拥有动态和动态的所有内容)。

这是创建文件的起点,

Dynamic in-memory compilation

这里有用于编写Java脚本的东西,

Scripting for Java