【发布时间】:2017-07-06 16:06:31
【问题描述】:
在 Java 中是否可以在运行时给一个类甚至它的函数一个新名称。通过在程序启动时将新名称作为参数或配置文件读入?
更新:
这是这样做的目的。我正在使用 Java 脚本引擎来允许任何与 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 我可以在运行时添加名称,使用组合来创建适配器类,然后编译文件,瞧,脚本语言人员可以使用他们定义的名称而不是我的 API 的 Java 名称。
这是完成此任务的唯一可行方法吗?
更新 2:
对于任何尝试这样做的人来说,这也是另一种可能的解决方案,
http://asm.ow2.org/doc/faq.html
这将带您直接进入他们的常见问题,其中将针对这个确切的问题提供一个。
【问题讨论】:
-
我不这么认为......但只是想问你为什么需要重命名你的类名?
-
如果您需要动态类名称,可能有比您想的更好的设计模式
-
听起来像是 XY 问题 (meta.stackexchange.com/questions/66377/what-is-the-xy-problem/…) - 你想做什么/解决什么?
-
备份。你想解决什么问题?
-
尝试为类似的东西实现动态类命名是愚蠢的
标签: java