クラスのメモリ内「コンパイル」に関する私の古い質問を再訪したいと思います。私が尋ねてから約 1/2 年が経過したので (そしていくらか回答がありました)、私は問題を再提起し、何か新しいものが出てくるかどうかを確認したいと思います (いいえ、私はこれを重複とは見なしません) .
古い質問はここにあります: On-the-fly, in-memory Java code compilation for Java 5 and Java 6 - この質問に答える前に、それ (および回答) を読むことをお勧めします。
私は、Beanshell が Java クラスの文字列を実際の Class オブジェクトに評価するという重い作業を行っていることに非常に満足しています。しかし、beanshell は長い間バージョン 2.0b4 のままであり、その制限 (コンストラクターもデフォルトもありません。ジェネリックも for-each も enum もありません...) が厄介です。
注意 - これはデバッグ インターフェイスとして使用されるため、パフォーマンスに関する考慮事項は無視できます。ただし、サーバーを再起動することも、クラス ファイルをその場所に送信することもできず、JSP は私にとって非常に悪い選択です (理由についてはここでは説明しません)。また、最終製品はクラス (またはそのクラスのオブジェクト) でなければならないので、それを渡すことができます。
いくつかの制限: 私は JDK を持つことができないので、javax.tools.JavaCompiler はありません。Tomcat やその他の「実際の」Web コンテナーがないため、JSP を使用できません。Java 5 構文のサポート、特にジェネリック、列挙型、およびパラメーター化のサポートは素晴らしいでしょう。デフォルトのコンストラクターのサポートは非常に優れています。
何か案は?
編集 1:beanshell でコンストラクターを使用するラウンド アバウトな方法があることがわかりましたが、通常の方法ではなく「public void XXX(){...}」と宣言する必要があります。 ...}".