具有可选参数的GWT UIC构造函数

具有可选参数的GWT UIC构造函数,gwt,uibinder,Gwt,Uibinder,我们有一个带有4个参数的自定义小部件。其中一个参数是可选的。 如果我们在UiBinder中使用小部件并省略可选字段,则会引发错误 比如说 MyWidget(String arg1, String arg2, String arg3) { ... } 如果我在UiBinder文件中写入 ... <b:MyWidget arg1="sdfsd" arg2="fsdgds" arg3="ertlkj"> ... 。。。 ... 如果我写 ... <b:MyWidget ar

我们有一个带有4个参数的自定义小部件。其中一个参数是可选的。 如果我们在UiBinder中使用小部件并省略可选字段,则会引发错误

比如说

MyWidget(String arg1, String arg2, String arg3) {
  ...
}
如果我在UiBinder文件中写入

...
<b:MyWidget arg1="sdfsd" arg2="fsdgds" arg3="ertlkj">
...
。。。
...
如果我写

...
<b:MyWidget arg1="sdfsd" arg2="fsdgds">
...
。。。
...
然后发生以下错误:

[ERROR] <MyWidget arg1="sdfsd" arg2="fsdgds"> missing required attribute(s): arg3:     <b:MyWidget arg1="sdfsd" arg2="fsdgds">
[ERROR]缺少必需的属性:arg3:

有什么方法可以定义可选参数吗?

不管好坏,没有-这就是UiBinder的设计方式。您只能指定一个
@UiConstructor
,UiBinder将始终使用该构造函数


如果可能的话,不要让它们成为构造函数参数,而是让它们成为setter。如果存在
arg3
属性,则可以选择调用
setArg3()
方法,而不是尝试在构造函数之间切换。

无论好坏,否-UiBinder就是这样设计的。您只能指定一个
@UiConstructor
,UiBinder将始终使用该构造函数


如果可能的话,不要让它们成为构造函数参数,而是让它们成为setter。如果存在
arg3
属性,则可以选择调用
setArg3()
方法,而不是尝试在构造函数之间切换。

我在小部件中没有看到任何可选参数-所有参数都是必需的。你可以做:

MyWidget(String arg1, String arg2) {
  ...
}

public void setArg3(String arg3) {
    this.arg3 = arg3;
}
或:


那么您的Ui:Binder声明应该都能工作。

我在您的小部件中没有看到任何可选参数-所有这些都是必需的。你可以做:

MyWidget(String arg1, String arg2) {
  ...
}

public void setArg3(String arg3) {
    this.arg3 = arg3;
}
或:


那么您的两个Ui:Binder声明都应该可以工作。

如果可能,我将使用
var-args
进行测试。如果可能,我将使用
var-args
进行测试。