GWT JavaScriptObject重载通用失败

时间:2011-09-04 05:58:00

标签: javascript gwt

我尝试使用处理JavaScriptObjects的列表重载List

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

在编译为javascript时工作正常但在托管模式和Designer中都失败。问题源于

CompilingClassLoader::findOverloadUsingErasure(JClassType implementingType, JMethod intfMethod)

当函数试图找到重载函数时,它失败了,因为JsList的类型T通过擦除等同于JavaScriptObject而类型T的List等于Object。有关修复此问题的任何建议吗?

1 个答案:

答案 0 :(得分:0)

鉴于一个接口最多可以由一个JSO实现,那么如何删除类型变量的边界呢?

替代方法是将JSO包装到实现List的对象中,而不是让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