我想重新审视我的一个关于类的内存“编译”的老问题。自从我问(并且得到了一些回答)以来,大约一年过去了 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(){ ...}”。