Java中如何通过语言名称和版本获取ScriptEngine?

本示例说明如何获取特定语言名称和特定语言版本的脚本引擎。在下面的代码中,我们尝试获取ECMAScriptversion的脚本引擎实例1.8。

package org.nhooo.example.script;

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import java.util.List;

public class ScriptEngineSearch {
    public static void main(String[] args) {
        String languageName = "ECMAScript";
        String languageVersion = "1.8";

        // 创建一个ScriptEngineManager并获取可用列表
        // 发动机工厂。
        ScriptEngineManager manager = new ScriptEngineManager();
        List<ScriptEngineFactory> factories = manager.getEngineFactories();

        // 我们从可用的工厂那里获得了ScriptEngine,
        // 语言名称为ECMAScript,版本为1.6。
        // ECMAScript是JavaScript编程的标准名称
        //语言。如果找到所需的语言,我们将获得
        // 通过调用工厂的getScriptEngine()方法来实现ScriptEngine。
        ScriptEngine engine = null;
        for (ScriptEngineFactory factory : factories) {
            String language = factory.getLanguageName();
            String version = factory.getLanguageVersion();

            if (language.equals(languageName)
                    && version.equals(languageVersion)) {
                engine = factory.getScriptEngine();
                break;
            }
        }

        if (engine != null) {
            try {
                engine.eval("println('Hello There')");
            } catch (ScriptException e) {
                e.printStackTrace();
            }
        }
    }
}