GWT.create(SomeClass.class)
和new SomeClass()
有什么区别?
为什么你会选择使用其中一种而不是另一种?
GWT.create(SomeClass.class)
和new SomeClass()
有什么区别?
为什么你会选择使用其中一种而不是另一种?
GWT.create
用于 GWT 编译器的延迟绑定。延迟绑定是 GWT 编译器的一项功能,它通过在编译时生成许多代码版本来工作,其中只有一个需要在运行时的启动期间由特定客户端加载。
你应该仅对依赖于此特定用例的情况使用 GWT.create
,例如创建 RPC 类:(MyServiceAsync)GWT.create(MyService.class)
。在所有其他情况下,请使用 new
。
有关更多信息,请查看 GWT 延迟绑定页面:http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsDeferred.html
GWT.create使用延迟绑定工作来弥补缺乏反射支持的不足。
根据FAQ:
延迟绑定是Google Web Toolkit对Java反射的回答。
从一个使用案例开始,最容易解释延迟绑定。每个Web浏览器都有自己的特性,通常有很多。 (首先创建GWT的问题就是纯数量实在太大了)。标准的Java处理特性的方法是将自定义代码封装到子类中,每个支持的浏览器都有一个子类。在运行时,应用程序将使用反射和动态类加载选择当前环境的适当子类,加载类,创建实例,然后在程序的持续时间内使用该实例作为服务提供者。
这确实是GWT所做的。但是,GWT应用程序最终运行的JavaScript环境根本不支持动态类加载(也称为动态绑定)。您当然可以在生成的JavaScript代码中包含支持每个浏览器的代码,但是为此必须在单个应用程序文件中包含对所有浏览器的支持。如果不会需要它,为什么Opera用户必须下载特定于Firefox的代码?
由于动态绑定作为一种技术对GWT不可用,因此GWT使用延迟绑定。可以将其视为“在编译时而不是执行时间进行的动态类加载”。当GWT编译Java应用程序时,它确定必须支持的所有不同“特性”,并为该特定配置生成单独的、高度简化的应用程序版本。例如,它为Firefox生成与Opera不同的应用程序文件的版本。
GWT.create
。如果未找到延迟绑定规则,则GWT编译器将把其翻译为“ new”运算符。这在创建具有扩展点的库或组件以供其他开发人员稍后使用时非常有用。 - Gilberto Torrezan