Смешивание типов наложения Java POJOs и GWT

#gwt #overlay #pojo

#gwt #наложение #pojo

Вопрос:

В моем приложении я широко использую JsArray для хранения моих типов наложения. Я использую java.util.Список для хранения моих клиентских Java POJOS.

По соображениям производительности и для унификации способа доступа к моей модели я планировал исключить списки и использовать только оболочки JSO. Предоставляется оболочка вокруг собственного массива, который может хранить любой объект Java:

  public class JsArrayObject<T> extends JavaScriptObject {

        protected JsArrayObject() {}

        public final native T get(int index) /*-{
            return this[index];
        }-*/;

        public final native void push(T value) /*-{
            this[this.length] = value;
        }-*/;
    }
  

Безопасно ли хранить объекты Java таким образом? В документе говорится, что когда вы передаете объект Java в JavaScript, результатом является «непрозрачное значение, доступное через специальный синтаксис». Это звучит для меня странно. Например, если я введу целое число и попытаюсь его получить, будет выдано исключение, потому что было найдено что-то отличное от объекта (по крайней мере, в режиме разработки). То же самое происходит с остальными оболочками Java-примитивов. Помимо проблем с Java-примитивными оболочками, есть ли другие проблемы, о которых следует знать?

Большое спасибо

Ответ №1:

На какой документ вы ссылаетесь? Тот, что на этой странице?

Они говорят в терминах передачи объектов Java в JavaScript с намерением заставить код JavaScript использовать методы или поля в объекте. Это возможно сделать, но синтаксис, который вам приходится использовать на стороне JavaScript, немного неудобен. Если вы делали какой-либо JSNI, вы его видели.

Если вы не собираетесь получать доступ к объектам Java со стороны JavaScript, вы можете проигнорировать вопрос о специальном синтаксисе. Так что да, это безопасно. Мне было бы интересно узнать, действительно ли это помогает производительности.

Комментарии:

1. Спасибо. Теперь я понимаю, что они имели в виду под «непрозрачным значением, доступным через специальный синтаксис». Я намереваюсь использовать JavaScriptObjects для хранения Java POJOS, но мне не нужно вызывать методы Java из Javascript. Меня беспокоит только то, не испортит ли компилятор эту структуру.

2. Компилятор ничего не испортит. Когда интерпретатор JavaScript выполняет код, сгенерированный компилятором GWT, все является либо примитивом JavaScript, либо объектом JavaScript. Некоторые из этих объектов JavaScript представляют объекты Java. Объектные модели Java и JavaScipt настолько различны, что объекты Java выглядят странно со стороны JavaScript, но если бы это было проблемой, GWT не работал бы вообще.

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