Зачем использовать GWT.create () вместо new? - PullRequest
57 голосов
/ 11 февраля 2010

В чем разница между GWT.create(SomeClass.class) и new SomeClass()?

Зачем вам использовать один над другим?

Ответы [ 2 ]

64 голосов
/ 11 февраля 2010

GWT.create используется компилятором GWT для отложенного связывания. Отложенное связывание - это функция компилятора GWT, которая генерирует множество версий кода во время компиляции, только одна из которых должна загружаться конкретным клиентом во время начальной загрузки во время выполнения.

Вы должны использовать GWT.create только для тех случаев, которые зависят от этого конкретного варианта использования. Например, при создании класса RPC: (MyServiceAsync)GWT.create(MyService.class). Во всех остальных случаях используйте new.

Для получения дополнительной информации посетите страницу GWT по отложенной привязке: http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsDeferred.html

29 голосов
/ 11 февраля 2010

GWT.create использует отложенную привязку к окружности из-за отсутствия поддержки отражения.

Согласно FAQ :

Отложенное связывание - это ответ Google Web Toolkit на отражение Java.

Проще всего объяснить отложенное связывание, начав с варианта использования. Каждый веб-браузер имеет свои особенности, обычно их много. (Абсолютно неуправляемое их количество - это проблема, которую GWT был создан для решения в первую очередь.) Стандартный способ Java для работы с идиосинкразиями должен заключаться в инкапсуляции пользовательского кода в подклассы с одним подклассом для каждого поддерживаемого браузера. Во время выполнения приложение будет использовать отражение и динамическую загрузку классов, чтобы выбрать соответствующий подкласс для текущей среды, загрузить класс, создать экземпляр, а затем использовать этот экземпляр в качестве поставщика услуг на время выполнения программы.

Это действительно то, что делает GWT. Однако среда JavaScript, в которой в конечном итоге выполняются приложения GWT, просто не поддерживает динамическую загрузку классов (также известную как динамическое связывание). Вы, безусловно, можете включить код для поддержки каждого браузера в ваш сгенерированный код JavaScript, но для этого необходимо включить поддержку всех Браузеры находятся в одном файле приложения. Зачем пользователю Opera скачивать код, специфичный для Firefox, когда нет никаких шансов, что он когда-нибудь понадобится?

Поскольку динамическое связывание недоступно как метод для GWT, вместо этого GWT использует отложенное связывание. Один из способов думать об этом - «динамическая загрузка классов, которая происходит во время компиляции, а не во время выполнения». Когда GWT-компилятор компилирует ваше Java-приложение, он определяет все различные «идиосинкразии», которые он должен поддерживать, и генерирует отдельную, строго оптимизированную версию приложения для этой конкретной конфигурации. Например, он генерирует другую версию файла приложения для Firefox, чем для Opera.

...