-1

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

前任:

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

然后也许Paython说

obj = new NewName()
obj.hello()

请告诉我这是否不可能!

4

2 回答 2

1

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

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

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

说了这么多,我真的想不出一个很好的理由来做这件事。

于 2014-06-25T13:35:49.360 回答
0

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

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

这是创建文件的起点,

动态内存编译

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

Java 脚本

于 2014-07-16T02:06:48.220 回答