Java 可以动态重命名类名吗?

Java 可以动态重命名类名吗?,java,Java,在Java中,是否可以在运行时为类甚至其函数指定一个新名称。当程序启动时,通过读取新名称作为参数或配置文件 更新: 这就是本文的目的。我使用Java脚本引擎允许任何JSR223兼容的脚本语言访问我们的API。我们的一些客户不习惯使用Java和它的命名约定,使用他们自己的特定命名约定会感觉更舒服。因此,我需要让他们能够动态更改API的类和函数名,而不必在代码中实际更改它们。有人建议我使用一个映射和一个字符串名和实际Java名的某种绑定,例如 map.put("Hello",HelloWor

在Java中,是否可以在运行时为类甚至其函数指定一个新名称。当程序启动时,通过读取新名称作为参数或配置文件

更新:

这就是本文的目的。我使用Java脚本引擎允许任何JSR223兼容的脚本语言访问我们的API。我们的一些客户不习惯使用Java和它的命名约定,使用他们自己的特定命名约定会感觉更舒服。因此,我需要让他们能够动态更改API的类和函数名,而不必在代码中实际更改它们。有人建议我使用一个映射和一个字符串名和实际Java名的某种绑定,例如

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

    Object obj = new Hello();
应该是一样的,

    Object obj = new HelloWorld();
如果这不可能,请告诉我原因。我需要一个可靠的Java专业知识答案。这是我力所不及的,我需要事实来告诉人们为什么这是不可能的,尽管我自己几乎肯定这是不可能的

可能的解决办法:

这是我想出的壁橱解决方案。使用此链接, 我可以在运行时添加名称,使用composition创建适配器类,然后编译文件,瞧,脚本语言的人们可以使用他们定义的名称而不是API的Java名称

这是实现这一目标的唯一可行方法吗

更新2:

这是另一个可能的解决方案


这将直接带您进入他们的常见问题解答,其中有一个用于解决此问题。

否,您将需要重构以供参考,并重新编译以供执行。

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

我不这么认为……但我只是想问一下,为什么需要重命名类名?如果需要动态类名,可能有一种比您所想的更好的设计模式听起来像是XY问题()-您想做什么/解决什么?备份。你想解决什么问题?尝试为类似的东西实现动态类命名是愚蠢的,所以只是为了澄清,即使我想,我也不能这样做?没有反射、脚本或任何形式的绑定?这个呢?或者,这仅适用于软件包。@codeMonkey您可以使用所需的名称扩展所有类,并仅使用super覆盖所有方法,但在运行时仍然不能这样做。@codeMonkey with ASM您不是在重命名类本身,而是在重新创建它。但对于你的回答,它可能会起作用。谢谢你的可靠答案。您上面的第二条评论听起来像是我使用这种技术的想法,但我可以像您所说的那样使用组合或继承,并创建一个适配器类。