在via nashorn中实例化类

时间:2013-11-09 01:54:30

标签: javascript java-8 nashorn

我正在考虑用javascript / nashorn替换我用于配置的所有xml文件和构建器。假设我有一个java类,它是构建器样式配置对象

class Configuration {
    String name;
    Configuration withName(String name) {
        this.name = name;
        return this;
    }
    int number;
    Configuration withNumber(int number) {
        this.number = number;
        return this;
    }
}

我想直接在javascript中实例化这个类,并让nashorn返回给我一个实例。我想用javascript编写代码

{
    name: 'qwerty',
    number: 42
};

然后最后读取文件,将其传递给脚本引擎,并让它将对象评估为Configuration的实例。

  • 是否可以使用类似json的语法?
  • 我不会使用Packages.Configuration / Java.type(“Configuration”); Java.extend(),但尚未取得任何成功。
  • 或者我必须为返回的值制作/使用合适的读者吗?

2 个答案:

答案 0 :(得分:1)

不,Nashorn不会从我从可用文档和JSR-223看到的内容中获得支持。您可能需要使用,即杰克逊的ObjectMapper来反序列化JSON。这应该不是问题,因为Nashorn允许您在JavaScript中执行几乎任何操作:A JavaFX Script Application Examples

你可能还想考虑Groovy,它有自己的地图语法,可以在构造函数中使用:Groovy Goodness: Using Lists and Maps As Constructors。 Groovy通常用于定义配置。

答案 1 :(得分:1)

您可以通过将转换器功能附加到配置类型来作弊。这可以在JS方面轻松添加,而不是试图用Java编写。

var ConfigClass = Java.type('Configuration');

ConfigClass.fromJsObj = function(jsObj) {
    var newConfig = new ConfigClass();
    foreach(var prop in jsObj) {
        newConfig[prop] = jsObj[prop];
    }
    return newConfig;
}

var myConfig = ConfigClass.fromJsObj( { name: "qwerty", number: 42 } );