我正在使用以下编辑器来支持可为空的列表:
public class NullableListEditor<T, E extends Editor<T>> extends Composite implements
IsEditor<OptionalFieldEditor< List<T>, ListEditor<T,E> >> {
private ListEditor<T, E> list = ListEditor.of(new ListEditorSource());
private final OptionalFieldEditor<List<T>, ListEditor<T, E> > editor = OptionalFieldEditor.of(list);
…
}
public class NullableAListEditor extends NullableListEditor<A, AEditor> {..}
public class NullableBListEditor extends NullableListEditor<B, BEditor> {..}
如果我创建两个实例,比如先创建 NullableAListEditor,然后创建 NullableBListEditor,NullableAListEditor 会正常工作,但 NullableBListEditor 会失败,并抱怨 BEditor 无法转换为 AEditor。(如果我创建 B 然后 A,A 将因类似原因而失败。)我对其进行了调试,这似乎是 AbstractEditorDelegate.java 中的一个问题: http ://code.google.com/p/google-web-toolkit /source/browse/releases/2.4/user/src/com/google/gwt/editor/client/impl/AbstractEditorDelegate.java?r=10474 在第 75 行,对于 NullableBListEditor , createComposedDelegate() 返回的对象类型相同与 NullableAListEditor 一样。在创建第一个编辑器(NullableAListEditor)后,似乎类型不再改变,但我不知道为什么。
详细错误:
java.lang.ClassCastException: ..editor.B.BEditor cannot be cast to
...editor.A.AEditor
at ..editor.A.AEditor_SimpleBeanEditorDelegate.setEditor(AEditor_SimpleBeanEditorDelegate.java:6)
at com.google.gwt.editor.client.impl.AbstractEditorDelegate.initialize(AbstractEditorDelegate.java:200)
at com.google.gwt.editor.client.impl.AbstractEditorDelegate.addSubDelegate(AbstractEditorDelegate.java:156)
at com.google.gwt.editor.client.impl.AbstractEditorDelegate$Chain.attach(AbstractEditorDelegate.java:78)
at com.google.gwt.editor.client.adapters.ListEditorWrapper.attach(ListEditorWrapper.java:95)
at com.google.gwt.editor.client.adapters.ListEditor.setValue(ListEditor.java:164)
at com.google.gwt.editor.client.adapters.ListEditor.setValue(ListEditor.java:1)
at com.google.gwt.editor.client.impl.Refresher.visit(Refresher.java:40)
at com.google.gwt.editor.client.impl.Initializer.visit(Initializer.java:49)
at com.google.gwt.editor.client.impl.AbstractEditorContext.traverse(AbstractEditorContext.java:128)
at com.google.gwt.editor.client.impl.AbstractEditorDelegate$Chain.traverse(AbstractEditorDelegate.java:100)
at com.google.gwt.editor.client.impl.AbstractEditorDelegate$Chain.attach(AbstractEditorDelegate.java:83)
at com.google.gwt.editor.client.adapters.OptionalFieldEditor.setValue(OptionalFieldEditor.java:113)
at com.google.gwt.editor.client.impl.Refresher.visit(Refresher.java:40)
at com.google.gwt.editor.client.impl.Initializer.visit(Initializer.java:49)
at com.google.gwt.editor.client.impl.AbstractEditorContext.traverse(AbstractEditorContext.java:128)
难道我做错了什么?
非常感谢,-杰夫