Исключение приведения класса при приведении 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);