是否可以使用可选参数对JSNI函数进行建模?

时间:2014-03-11 01:00:20

标签: java javascript html gwt jsni

我想为以下JavaScript函数编写GWT JSNI包装函数。

object.cache(config);

其中config是具有以下可选参数的对象

- x Number
- y Number
- width Number
- height Number
- length Number

我认为将函数参数的所有可能组合覆盖为Java函数并不好。

如何使用许多可选参数将这样的JavaScript函数建模为JSNI Java函数?

1 个答案:

答案 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; }