2017-12-09 1 views
0

に形成したJava関数を呼び出す方法を、私はのparamsを渡すことによって、その機能を実行したい(これは通常のJava機能のように振る舞うように)私は文字列の形で機能を持っているSpringBoot、</p> <p>を使用しています文字列

例:

String s = "public void method_name(String name, int s) {\n" + 
       "  System.out.println(name + s);\n" + 
       " }"; 

私は、この関数をコールする場合、入力:METHOD_NAME( "ABC"、10)

outpu t:abc10

私はそこに何らかの方法で、または任意のライブラリをJAVAで使用できますか?

物事は私が試した:

1)使用しjava.beans.Statement。

ありがとうございます! :)

私はこれがなぜ必要なのですか? JSONファイルでこの関数を使用していますが、この関数を動的に使用します。 JSON obj:

{ 
"1":{ 
"function" : "public void method_name(String name, int s) {\n" + 
        "  System.out.println(name + s);\n" + 
        " } " 
}, 
"2": { 
    "function" : another function 
} 
} 

これはわかりますか。

+1

これを行う理由を少し説明できますか?あなたはどんな問題を解決していますか? – xs0

+0

Javaコードインタープリタが必要な場合は、beanshellを参照できます。http://www.beanshell.org/intro.html –

+0

[JShell API?](https://docs.oracle.com/ javase/9/docs/api/jdk/jshell/package-summary.html) –

答えて

1

これを行うには、javax.tools.JavaCompilerを参照してください。

もつとも

アプリケーションで巨大セキュリティホールを作成することがあります。ユーザーがそのjsonファイルにアクセスするとどうなりますか?彼らはあなたのアプリケーションを通してあなたのサーバー上で任意のコードを実行することができます。

本当にやりたいことがあれば、本当に自分に尋ねる必要があります。おそらく、あなたが望むものを達成するためのより簡単な方法がありますか?たとえば、戦略デザインパターンを見てください。おそらくそれはあなたがすでに望んでいるもののほとんどを行うことができます。

また、JavaCompilerは作業するのがかなり難しいです。 JavaCompilerに加えて、リフレクションとクラスローダーが動作するようにする必要があります。それがこの道を踏み外さない別の理由です。

しないでください。

関連する問題