我正在考虑用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的实例。
答案 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 } );