問題の説明
私の質問を説明するためのやや不自然な例。フロントエンド開発者の軍隊によってすでに維持され、毎日更新されている JavaScript 関数のライブラリがあると想像してください。具体的には、そのような関数の 1 つが次のようになると想像してください。
function employeesForStore(store) {
var dictionary = {
"downtown": ["Joe", "Mary", "Steve"],
"uptown": ["Jules", "Vincent", "Matt"],
// and so on for hundreds of locations
};
return dictionary[store];
}
注:この関数の実装の詳細は無視してください。実際の関数は単純な JSON ディクショナリ ルックアップよりもはるかに複雑である可能性があり、js 関数に関する実装の詳細がまったくわかっていないと仮定します。私たちが知っているのは、文字列引数を取り、文字列の配列を返すことだけです。
ここで、Java コードでこの関数を利用したいと思います。つまり、私たちの Java コードでは、この関数を「ロード」してから、複数回呼び出して、引数を渡し、または結果String
を受け取ることができるようにしたいと考えています。String[]
ArrayList<String>
これまでに SO と google を検索した結果、これには以下を使用する必要があることを理解しています。
javax.script.ScriptEngineManager
javax.script.ScriptEngine
- おそらく
scriptEngine.getContext()
関数に値を渡し、結果を受け取るためです。
特に、私が見つけたほとんどの例では、javascript 関数を Java で使用できるようにするのではなく、javascript コードを 1 回実行する必要があるため、上記の詳細については少し曖昧です。
見たいサンプルコード
- js 関数がファイル "my_functions.js" にあると仮定すると、そのファイルを Java にロードして、そのすべての関数を使用できるようにします。
- を呼び出し
employeesForStore("downtown")
て、その結果をネイティブ JavaString[]
またはList<String>
という変数に格納しますdowntownResults
。 - 2 と同じですが、呼び出し
employeesForStore("uptown")
て変数に格納しますuptownResults