2010-02-11 5 views

Répondre

61

GWT.create est utilisé par le compilateur GWT pour la liaison différée. La liaison différée est une fonctionnalité du compilateur GWT qui fonctionne en générant de nombreuses versions de code au moment de la compilation, dont une seule doit être chargée par un client particulier lors de l'amorçage au moment de l'exécution.

Vous ne devez utiliser le GWT.create que pour les cas qui dépendent de ce cas d'utilisation spécifique. Par exemple lors de la création d'une classe RPC: (MyServiceAsync)GWT.create(MyService.class). Dans tous les autres cas, utilisez new.

Pour plus d'informations, consultez la page GWT sur la liaison différée: http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsDeferred.html

+2

Merci pour cela - donc (dans le cas de base) si la mise en œuvre ne change pas pour différents locale/navigateurs, utilisez new, s'il y aura plusieurs implémentations, utilisez create. – RodeoClown

+0

En fait, vous pouvez également utiliser 'GWT.create' si vous n'utilisez pas la liaison différée. Le compilateur GWT traduira cela à l'opérateur 'new' si aucune règle de liaison différée n'est trouvée. C'est utile lors de la création d'une lib ou d'un composant avec des points d'extension qui seront utilisés plus tard par d'autres développeurs. –

28

GWT.create utilise le travail de liaison différée à environ pour le manque de support de réflexion.

Selon le FAQ:

Reliure différée est la réponse de Google Web Toolkit à la réflexion Java.

Il est plus facile d'expliquer la liaison différée en commençant par un cas d'utilisation. Chaque navigateur Web a ses propres idiosyncrasies, généralement beaucoup d'entre eux. (Le nombre ingérable d'entre eux est le problème que GWT a été créé pour résoudre en premier lieu.) La façon standard de traiter les idiosyncrasies de Java serait d'encapsuler le code personnalisé en sous-classes, avec une sous-classe pour chaque navigateur pris en charge. Lors de l'exécution, l'application utilise la réflexion et la répartition dynamique des classes pour sélectionner la sous-classe appropriée pour l'environnement actuel, charger la classe, créer une instance, puis utiliser cette instance en tant que fournisseur de services pour la durée du programme.

C'est en effet ce que fait GWT. Cependant, l'environnement JavaScript dans lequel les applications GWT s'exécutent finalement ne supporte pas la charge de classes dynamique (également appelée liaison dynamique). Vous pouvez certainement inclure du code pour supporter chaque navigateur dans votre code JavaScript généré, mais pour cela, vous devez inclure les navigateurs se trouvent dans le fichier d'application unique. Pourquoi un utilisateur d'Opera doit-il télécharger un code spécifique à Firefox, alors qu'il n'y a aucune chance qu'il en ait besoin? Comme la liaison dynamique n'est pas disponible en tant que technique pour GWT, GWT utilise à la place la liaison différée. Une façon d'y penser est la suivante: "le chargement dynamique des classes qui se produit au moment de la compilation au lieu du temps d'exécution". Lorsque le compilateur GWT compile votre application Java, il détermine toutes les «idiosyncrasies» différentes qu'il doit prendre en charge et génère une version distincte et étroitement rationalisée de l'application pour cette configuration spécifique. Par exemple, il génère une version différente du fichier d'application pour Firefox que pour Opera.

+0

Non seulement cela, mais la plupart des cadres qui reposent sur la génération de code (non seulement de contourner le manque de réflexion) utilisent la méthode GWT.create. –

Questions connexes