Исключение приведения класса при приведении elemental2.dom.Event к elemental2.dom.CustomEvent в GWT

Я использую elemental2 (GWT) для регистрации для определенного пользовательского события типа CustomEvent — прослушиватель вызывается после отправки события, но я получаю ClassCastException в браузере, когда пытаюсь выполнить приведение из Event (тип класса eventListener) в CustomEvent (это то, что я отправил, и подкласс Event).

Код получения события:

      DomGlobal.window.addEventListener("mycustomevent", event ->
{
  CustomEvent<String> customEvent=(CustomEvent<String>)event;
  String myDetails = customEvent.detail;
}

Код GWT компилируется без проблем и все работает в браузере корректно вплоть до приведения из elemental2.dom.Event в elemental2.dom.CustomEvent. В этот момент я получаю ClassCastException.

Вот как я создаю CustomEvent и запускаю его:

      CustomEventInit<String> eventInit = CustomEventInit.create();
eventInit.setDetail("my message");
CustomEvent<String> event = new CustomEvent<>("mycustomevent", eventInit);
DomGlobal.window.parent.dispatchEvent(event);

Я посмотрел на фактический тип, который получает слушатель, и интересно то, что имя класса, которое мне возвращается, — com.google.core.client.JavaScriptObject, а не elemental2.dom.Event, как я ожидал от интерфейса. подпись.

      event.getClass().getName();

Также интересно, что я могу использовать полученное событие, как если бы оно было типа elemental2.dom.Event.

Обходной путь, который работает для меня в данный момент для получения подробного члена события Customer, - это откат к JSNI.

      public final native String getDetail(Event e)/*-{
        return e.detail;
    }-*/;

Это вернет детали CustomEvent. Есть ли альтернативный способ?

1 ответ

В вашем случае вам нужно будет получить среду выполнения GWT, чтобы пропустить проверку приведения, которую она обычно делает.

      CustomEvent<String> customEvent = Js.uncheckedCast(event);

В этом ответе на другой вопрос обсуждается кастинг в GWT.

Другие вопросы по тегам