从以下链接我了解到GWT仅在客户端支持以下包中的类或方法的子集。
java.lang
java.lang.annotation
java.util
java.io
java.sql
https://developers.google.com/web-toolkit/doc/1.6/RefJreEmulation#Package_java_lang
为什么会这样? 我认为它在开发中会产生更多问题,因为我只使用GWT客户端并使用REST Web服务而不是服务器。
是否有任何新版本的jar,例如gwtx(支持持久性,注释等的新版本),用于使用上述包中的所有类和方法。 我怀疑他们为什么不支持所有人?
答案 0 :(得分:9)
为了支持将Java转换为JavaScript,每个标准类必须模拟,即以GWT编译器知道如何将其转换为JavaScript的方式重新创建。例如ArrayList
基于JavaScript Array
,String
方法必须在JavaScript String
等基础上进行模拟。
有些事情根本无法模仿(文件,套接字)。其他一些事情并非模仿,因为模拟版本虽然技术上可行,但其性能远远低于浏览器API的更直接映射,而GWT则力求性能(第三方库,如GWTx,可以提供此类仿真(如果需要)兼容性(选择Java作为语言主要是为了利用工具,而不是提供兼容层以允许重用现有库)
最后,不支持反射,因为它会使编译器无法修剪死代码并进行所有优化:如何知道特定的类,字段或方法实际上并未被反射使用而不是直接调用?