我想为以下JavaScript函数编写GWT JSNI包装函数。
object.cache(config);
其中config是具有以下可选参数的对象
- x Number
- y Number
- width Number
- height Number
- length Number
我认为将函数参数的所有可能组合覆盖为Java函数并不好。
如何使用许多可选参数将这样的JavaScript函数建模为JSNI Java函数?
答案 0 :(得分:1)
我会将配置对象建模为JavaScriptObject
:
public class Config extends JavaScriptObject {
protected Config() { }
public native final boolean hasX() /*-{ return this.x == null; }-*/;
public native final double getX() /*-{ return this.x || 0; }-*/;
public native final void setX(double x) /*-{ this.x = x; }-*/;
public native final void unsetX() /*-{ delete this.x; }-*/;
…
显然还有其他方法可以对其进行建模(例如使用java.lang.Double
)但是那个可能是编译JS输出中最轻量级的。
或者您可以使用java.lang.Double
参数,但是您需要为包装器对象付出代价:
public native void cache(Double x, Double y, Double width, Double height, Double length) /*-{
var cache = {};
if (x != null) { cache.x = x.@java.lang.Double::doubleValue()(); }
…
最后,如果在您的情况下有意义,您还可以使用特殊值:
var config = {};
if (x >= 0) { config.x = x; }