2011-09-04 77 views
0

我試圖重載列表與處理JavaScriptObjectsGWT JavaScriptObject超載通用失敗

public class JsList<T extends JavaScriptObject> extends JavaScriptObject implements List<T> 
{ etc...} 

編譯爲JavaScript,但在託管模式以及設計器出現故障,工作正常的列表。這個問題從

CompilingClassLoader::findOverloadUsingErasure(JClassType implementingType, JMethod intfMethod) 

莖當函數試圖找到重載函數,它失敗,因爲JsList的類型T通過擦除相當於JavaScriptObject和列表的類型T相當於對象。有關此問題的任何修復建議?

回答

0

假設一個接口可以最多由一個JSO來實現,如何刪除你的類型變量的範圍?

另一種方法是包裹JSO成一個對象實現列表,而不是讓JSO實現接口本身。

作爲一個側面說明,請記住,在Java List具有比JS數組更多的約束。例如,你可以在JS做:

var arr = []; 
// arr.length is 0 
arr[3] = "foo"; 
// arr.length is now 4 
arr.length = 2; 
// arr.length is now 2 
// arr[3] can be retrieved but is 'undefined' 

,你不能用Java做的事:

List<String> list = new ArrayList<String>(); 
// list.size() is 0 
list.put(3, "foo"); // ← throws an IndexOutOfBoundsException 
// list.get(3) would throw too