gwt_container google gwt new-operator

google - ¿Por qué usar GWT.create() en lugar de nuevo?



gwt install (2)

GWT.create emplea el trabajo de enlace diferido para evitar la falta de soporte de reflexión.

De acuerdo con las FAQ :

Enlazado diferido es la respuesta de Google Web Toolkit a la reflexión de Java.

Es más fácil explicar la vinculación diferida comenzando con un caso de uso. Cada navegador web tiene su propia idiosincrasia, generalmente muchos de ellos. (El gran número inmanejable de ellos es el problema que GWT fue creado para resolver, en primer lugar.) La forma estándar de Java de tratar con idiosincrasias sería encapsular el código personalizado en subclases, con una subclase para cada navegador compatible. En tiempo de ejecución, la aplicación usaría la reflexión y la carga de clases dinámicas para seleccionar la subclase apropiada para el entorno actual, cargar la clase, crear una instancia y luego usar esa instancia como proveedor de servicios durante la duración del programa.

Esto es de hecho lo que hace GWT. Sin embargo, el entorno JavaScript en el que finalmente se ejecutan las aplicaciones GWT simplemente no admite la carga de clases dinámica (también conocido como enlace dinámico). Ciertamente puede incluir código para admitir cada navegador en su código JavaScript generado, pero para hacerlo debe incluir soporte para todos navegadores está en el único archivo de la aplicación. ¿Por qué debería un usuario de Opera tener que descargar un código específico para Firefox, cuando no hay ninguna posibilidad de que alguna vez lo necesite?

Debido a que el enlace dinámico no está disponible como una técnica para GWT, GWT en cambio utiliza enlace diferido. Una forma de pensar en esto es como "carga dinámica de clases que ocurre en tiempo de compilación en lugar de tiempo de ejecución". Cuando el Compilador GWT compila su aplicación Java, determina todas las "idiosincrasias" diferentes que debe admitir, y genera una versión de la aplicación separada y estrechamente optimizada para esa configuración específica. Por ejemplo, genera una versión diferente del archivo de aplicación para Firefox que lo hace para Opera.

¿Cuál es la diferencia entre GWT.create(SomeClass.class) y new SomeClass() ?

¿Por qué usarías uno sobre el otro?


GWT.create es utilizado por el compilador GWT para el enlace diferido. La vinculación diferida es una característica del compilador GWT que funciona al generar muchas versiones de código en tiempo de compilación, de las cuales solo uno debe cargar un cliente en particular durante el arranque en el tiempo de ejecución.

Solo debe usar GWT.create para aquellos casos que dependen de este caso de uso específico. Por ejemplo, al crear una clase RPC: (MyServiceAsync)GWT.create(MyService.class) . En todos los demás casos use new .

Para obtener más información, consulte la página GWT en enlace diferido: http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsDeferred.html