我想重溫一個關於類的內存「編譯」的舊問題。自從我問了一些問題(並且有些回答)以來,大約有1/2年過去了,我想重新提出這個問題,看看是否會有新的東西出現(所以不會,我不認爲這是重複的) 。java內存中實時類編譯(和加載)
老問題可以在這裏找到: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(){...}」。
號碼許可問題。另外,客戶端可以更改我的服務器運行的JRE,所以這也是兼容性問題。 – 2009-11-25 09:54:48