我正在致力于一个定制小部件,我打电话给SelectionField
,它(简称)为ListBox
增加了功能,主要用于支持我们的HasDisplayText
接口。下面是会解释我的意思的方法:在自定义小部件中模仿成员字段?
public <T extends Enum<?> & HasDisplayText> void addItems(T [] items) {
if (items != null && items.length > 0) {
for (T item : items) {
selectionField.addItem(item.getDisplayText(), item.name());
}
}
}
我把这种方法是这样的:
selectionField.addItems(TimeZone.values());
我想有一个属性(用的getter/setter)enumClass
,使用户致电setEnumClass(TimeZone)
。我很难弄清楚如何做到这一点,同时确保传入的Enum类肯定会实现HasDisplayText
。
这工作:
public <T extends Enum<?> & HasDisplayText> void setEnumClass(Class<T> enumClass) {
if (enumClass != null) {
T[] constants = enumClass.getEnumConstants();
addItems(constants);
}
}
...但现在我想声明一个成员场this.enumClass
,因此它可以被设置为来电enumClass
。显然private <T extends Enum<?> & HasDisplayText> Class<T> enumClass
不起作用。我可以将该字段声明为private Class<?> enumClass
,务必对传入的类进行检查,并将其转换为来自getter的返回值,但这似乎更像是一种比正确方法更好的解决方法。
(作为奖励,我也希望能够编辑UiBinder的这个属性甚至GWT Designer中如果可能的话)。
如何能不能做到?
虽然我实际上直接从ListBox扩展'public class SelectionField&HasDisplayText> extends ListBox',这是一个很好的答案。 –