Почему использование GWT.create () вместо нового?

Между чем различие GWT.create(SomeClass.class) и new SomeClass()?

Почему Вы использовали бы один по другому?

57
задан RodeoClown 11 February 2010 в 05:05
поделиться

2 ответа

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

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

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

64
ответ дан 24 November 2019 в 19:38
поделиться

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

Согласно FAQ :

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

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

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

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

29
ответ дан 24 November 2019 в 19:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: