【发布时间】:2009-11-24 20:22:01
【问题描述】:
我想重温一个关于类的内存“编译”的老问题。自从我问(并且得到了一些回答)以来,大约一年过去了 1/2,我想重新提出这个问题,看看是否会出现新的问题(所以不,我不认为这是重复的) .
老问题可以在这里找到:On-the-fly, in-memory java code compilation for Java 5 and Java 6 - 我建议在回答这个问题之前阅读它(和答案)。
我很满意 beanshell 完成了将 java 类的字符串评估为实际 Class 对象的繁重工作。然而,beanshell 已经在 2.0b4 版本上运行了很长时间,它的局限性(没有构造函数,甚至没有默认值;没有泛型,没有 for-each,没有枚举......)很烦人。
提醒 - 这将用作调试接口,因此可以忽略性能考虑。但是,我不能让服务器重新启动,不能将类文件发送到该位置,并且 JSP 对我来说是一个非常糟糕的选择(我不会在这里讨论原因)。此外,最终产品必须是一个类(或该类的一个对象),以便我可以传递它。
一些限制:我没有 JDK,所以没有 javax.tools.JavaCompiler。我没有 JSP,因为我没有 tomcat 或其他“真正的”Web 容器。 Java 5 语法支持会很棒,尤其是泛型、枚举和参数化。对默认构造函数的支持会非常好。
有什么想法吗?
编辑 1:我刚刚发现有一种在 beanshell 中有构造函数的迂回方式 - 但是你必须将它们声明为“public void XXX(){...}”而不是通常的方式“public XXX (){...}"。
【问题讨论】:
标签: java compilation in-memory evaluate