我必須爲GWT/GXT項目開發一個「通用」wigdet,爲此我需要創建一個未知類型的對象實例。我發現了一種在開發模式下完美工作的方法,但只要我嘗試編譯我的項目並部署它,我會得到一個Only class literals may be used as arguments to GWT.create()
錯誤。GWT.create(clazz)「泛型」方法
這裏是我做的一個樣本:
public class GenericEditableGrid<M> extends Grid<M>{
private final ToolBar toolBar = new ToolBar();
private final TextButton newItemButton = new TextButton();
protected GridInlineEditing<M> editing;
private final Class<M> clazzM;
public GenericEditableGrid(Class<M> parametrizedClass, String gridTitle, ListStore<M> listStore, ColumnModel<M> cm) {
super(listStore, cm);
clazzM = parametrizedClass;
// ... then I create my widget
bind();
}
private void bind(){
newItemButton.addSelectHandler(new SelectEvent.SelectHandler() {
@Override
public void onSelect(SelectEvent selectEvent) {
editing.cancelEditing();
// it is the folliwing line which is the problem obviously
M element = GWT.create(clazzM);
getStore().add(0, element);
int index = 0;
editing.startEditing(new Grid.GridCell(getStore().indexOf(element), index));
}
});
}
}
這是我如何使用它在我的子類:
super(InternationalString.class, gridTitle, new ListStore<InternationalString>(isprops.key()), buildColumnModel());
基本上,我想知道是什麼問題恰恰在於這種方法,最終我該如何做才能做好。
請注意,我關心的不僅僅是讓它工作,更要以正確的方式去做。因爲我可以避免使用處理子類中的GWT.create()方法的抽象方法的問題。但這不是我想要的設計,只是看起來不正確。
我不也得是什麼這樣的區別:
MyClass e = GWT.create(MyClass.class);
和:
Class<MyClass> clazz=MyClass.class;
MyClass e = GWT.create(clazz);
因爲就我個人而言,我認爲這是基本上我在做什麼,它看起來像是一樣的東西。不是嗎?
爲什麼你叫'.getClass()'上getParameteriedClass()的'的結果。的getClass()' – StriplingWarrior
對不起它不應該有它只是我所做的只是在我張貼此線程一試。我更新了我的問題的代碼。 – RadASM