0

我正在考虑用 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
};

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

  • 这可能使用类似 json 的语法吗?
  • 我不会有问题使用 Packages.Configuration / Java.type("Configuration"); Java.extend(),但尚未取得任何成功。
  • 还是我必须为返回值制作/使用合适的阅读器?
4

2 回答 2

1

不,根据我从可用文档和JSR-223中看到的内容,Nashorn 不会支持这一点。您可能需要使用 ie Jackson'sObjectMapper来反序列化 JSON。这应该不是问题,因为 Nashorn 允许您在 JavaScript 中做几乎任何事情:JavaFX 脚本应用程序示例

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

于 2013-11-09T06:05:31.197 回答
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 } );
于 2014-08-07T20:11:16.160 回答