2010-02-11 19 views

risposta

61

GWT.create viene utilizzato dal compilatore GWT per il binding posticipato. Il binding posticipato è una funzionalità del compilatore GWT che funziona generando molte versioni di codice in fase di compilazione, solo una delle quali deve essere caricata da un particolare client durante il bootstrap in fase di runtime.

Utilizzare solo lo GWT.create per i casi che dipendono da questo caso d'uso specifico. Ad esempio quando si crea una classe RPC: (MyServiceAsync)GWT.create(MyService.class). In tutti gli altri casi, utilizzare new.

Per maggiori informazioni consultare la pagina GWT in differita vincolante: http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsDeferred.html

+2

Grazie per questo - quindi (nel caso di base) se l'implementazione non cambia per le diverse impostazioni internazionali/browser, utilizzare nuovo, se ci saranno più implementazioni utilizzare creare. – RodeoClown

+0

In realtà è possibile utilizzare 'GWT.create' quando non si utilizza il binding posticipato. Il compilatore GWT lo tradurrà nell'operatore 'new' se non viene trovata una regola di binding posticipato. È utile quando si crea una libreria o un componente con punti di estensione da utilizzare successivamente da altri sviluppatori. –

28

GWT.create utilizza il lavoro di rilegatura posticipato in giro per la mancanza di supporto per la riflessione.

Secondo il FAQ:

differite legame è la risposta di Google Web Toolkit per Java riflessione.

È più semplice spiegare il collegamento differito iniziando con un caso d'uso. Ogni web browser ha le sue idiosincrasie, di solito molte. (Il numero ingovernabile di questi è il problema che GWT ha dovuto risolvere in primo luogo.) Il modo standard Java di trattare le idiosincrasie sarebbe incapsulare il codice personalizzato in sottoclassi, con una sottoclasse per ciascun browser supportato. In fase di esecuzione, l'applicazione utilizza la riflessione e il caricamento dinamico delle classi per selezionare la sottoclasse appropriata per l'ambiente corrente, caricare la classe, creare un'istanza e quindi utilizzare tale istanza come provider di servizi per la durata del programma.

Questo è davvero ciò che fa GWT. Tuttavia, l'ambiente JavaScript in cui le applicazioni GWT alla fine funzionano semplicemente non supporta il caricamento dinamico delle classi (noto anche come associazione dinamica). Puoi certamente includere il codice per supportare ciascun browser nel tuo codice JavaScript generato, ma per farlo devi includere il supporto per tutti i browser si trovano nel singolo file dell'applicazione. Perché un utente di Opera deve scaricare un codice specifico per Firefox, quando non c'è alcuna possibilità che ne abbia mai bisogno?

Poiché il collegamento dinamico non è disponibile come tecnica per GWT, GWT utilizza invece il binding posticipato. Un modo per pensare a questo è come "caricamento di classi dinamico che si verifica in fase di compilazione invece di tempo di esecuzione". Quando il compilatore GWT compila la tua applicazione Java, determina tutte le diverse "idiosincrasie" che deve supportare e genera una versione separata, strettamente semplificata dell'applicazione per quella specifica configurazione. Ad esempio, genera una versione diversa del file dell'applicazione per Firefox di quanto non faccia per Opera.

+0

Non solo, ma la maggior parte dei quadri che si basano sulla generazione di codice (non solo per bypassare la mancanza di riflessione) utilizzano il metodo GWT.create. –

Problemi correlati