在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
这会直接带你到他们常见问题的问题,这些问题会解决这个问题。
答案 0 :(得分:2)
不,您需要重构引用并重新编译才能执行。
答案 1 :(得分:-1)
是的,你可以使用javassist来做到这一点。 特别是,您必须编辑NewExpr。