Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

В соответствии с FAQ:

Отложенная привязка - ответ Google Web Toolkit на отражение Java.

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

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

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