从运行时的 Java(不是 GWT,不是 UiBinder,而是 Java 语言本身)的角度来看,SimpleComboBox<Vegetable>
和SimpleComboBox<Fruit>
. 也就是说,这个错误来自 UiBinder 的代码生成,它正在寻找所有@UiConstructor
方法,并使用它们来构建东西。
那么 UiBinder 必须使用什么?在 UiBinder XML 中,没有泛型。UiBinder 能够做到这一点的唯一方法是,如果你碰巧@UiField
在你的类中包含了一个具有适当泛型的条目。这将需要@UiField
任何时候可能存在这样的歧义的注释,这是 GWT 目前不做的事情。
你想在这方面达到什么目的?您正在返回一个字段(vegetables
或fruits
) - 为什么该字段不被标记为@UiField(provided=true)
?然后,您可以从 UiBinder 中使用您为分配这些字段所做的任何接线,而根本不需要这些@UiConstructor
方法。
@UiField(provided=true)
SimpleComboBox<Fruit> fruits;
//...
public MyWidget() {
fruits = new SimpleComboBox<Fruit>(...);
binder.createAndBind(this);
}
...
<form:SimpleComboBox ui:field="fruits" />
如果这只是过度简化,并且您实际上计划在这些方法中创建新对象,那么请考虑传入一个参数,例如String type
,并根据值返回一个不同SimpleComboBox<?>
的值。从您的 UiBinder xml 中,您可以像这样创建正确的东西:
<field:SimpleComboBox type="fruit" />