使用 Google Web Toolkit 和 Eclipse Galileo 进行高性能 Web 开发
2009-12-13 00:00:00 来源:WEB开发网在清单 13 中,我们引入了一个新的抽象:一个 helper 函数。该函数接收一个 Thing 对象的集合,连接对每个 Thing 对象调用 getName() 方法的结果。分隔符也抽象为这个函数的一个参数。现在,让我们看看清单 14 中显示的编译后的 JavaScript。
清单 14. 编译后的 mkString 代码function $mkString(things, separator){
var sb, thing, thing$iterator;
sb = $StringBuilder(new StringBuilder());
for (thing$iterator = $AbstractList$IteratorImpl(new AbstractList$IteratorImpl(),
things); thing$iterator.i < thing$iterator.this$0.size_0();) {
thing = dynamicCast($next_1(thing$iterator), 16);
$append_2(sb, thing.getName());
sb.impl.string += String.fromCharCode(separator);
}
return $deleteCharAt(sb, sb.impl.string.length).impl.string;
}
// client code
user = $Person(new Person(), 'GWT', 'User');
userCompany = $Company(new Company(), 'ACME');
$setText_1(nameField, $mkString($Arrays$ArrayList(new Arrays$ArrayList(),
initValues(_3Lorg_developerworks_gwt_client_Thing_2_classLit, 0, 16,
[user, userCompany])), 32));
清单 14 中的代码的复杂程度与 Java 源代码类似。注意,循环内部调用了一个名为 dynamicCast 的函数。这个 JavaScript 用于检查传递过来的对象是否可以转换为指定类型的对象。在本例中,它将检查这个对象是 Person 还是 Company,因为只有这两个对象实现 Thing。通过引入针对该接口编写的代码并拥有多个接口实现,GWT 编译器可以实施的优化将变得很少。
更多精彩
赞助商链接