你能动态地重命名一个类名吗?

时间:2014-06-26 22:41:34

标签: java

在Java中是否可以在运行时为类或甚至其函数提供新名称。通过在程序启动时读入新名称作为参数或配置文件?

更新:

这就是目的。我正在使用Java Script Engine来允许任何兼容JSR 223的脚本语言访问我们的API。我们的一些客户不习惯使用Java及其命名约定,并且使用自己特定的命名约定会感觉更舒服。因此,我需要让他们能够动态更改API的类和函数名称,而无需在代码中实际更改它们。有人建议我使用Map和某种带有字符串名称和实际Java名称的绑定,例如

    map.put("Hello",HelloWorld.class)

    Object obj = new Hello();

应与

相同
    Object obj = new HelloWorld();

如果无法做到这一点,请告诉我原因。我需要一个可靠的Java专业知识答案。这是我的联盟,我需要事实来告诉人们为什么这是不可能的,即使我自己几乎肯定它是不可能的。

可能的解决方案:

这是我提出的壁橱解决方案。使用此链接, https://weblogs.java.net/blog/2005/08/10/reflection-and-dynamically-changing-classes 我可以在运行时添加名称,使用组合创建一个Adapter类,然后编译该文件,并且脚本语言人员可以使用他们定义的名称而不是我的API的Java名称。

这是唯一可以想到的方法吗?

更新2:

对于任何尝试此操作的人来说,这是另一种可能的解决方案,

http://asm.ow2.org/doc/faq.html

这会直接带你到他们常见问题的问题,这些问题会解决这个问题。

2 个答案:

答案 0 :(得分:2)

不,您需要重构引用并重新编译才能执行。

答案 1 :(得分:-1)

是的,你可以使用javassist来做到这一点。 特别是,您必须编辑NewExpr。