Я пытаюсь получить доступ к объекту Java, который в настоящее время находится в свойстве JavaScriptObject, но преобразование не выполнено.Вот что я делаю:
public static native MyJavaObject getMyObject(JavaScriptObject obj) /*-{
return obj['myProp'];
}-*/;
obj.myProp - это объект Java, который создается конструктором Java (который виден в Javascript, поскольку он экспортируется).Результатом, когда я запускаю приведенный выше код, является java.lang.ClassCastException в режиме разработки.
Однако, если сделать, как показано ниже, и получить доступ к секретному свойству g, это работает!Кажется, что gwt не удаляет оболочку при преобразовании возвращаемого значения.
public static native MyJavaObject getMyObject(JavaScriptObject obj) /*-{
return obj['myProp'].g;
}-*/;
Приведенный выше код работает, но это не решение, поскольку он использует детали реализации в gwt.Что я делаю не так?
Спасибо / Йохан
Некоторые новые выводы, найденные при тестировании:
Кажется, что проблемы зависят от объектов, экспортируемых gwt-exporter, не преобразуются какЯ ожидал в нативном коде.
- Экспортированные объекты оборачиваются, и исходный объект сохраняется в свойстве с именем g.
- Поскольку GWT не знает об этом, он не может получить оригиналобъект из обернутого экспортируемого объекта.
- При прохождении через экспортированные интерфейсы перенос и развертывание выполняются автоматически.
- Исключением из этого является, по-видимому, исключение при выполнении кода, имеющего дело с экспортированным объектом в собственных методах.Нативные методы ведут себя не так, как код, определенный как javascript, в том смысле, что они не обрабатывают развертывание экспорта.Это было найдено при попытке вызвать экспортированный метод с экспортированным объектом в качестве параметра.Это не удалось из нативного кода, но сделать то же самое из обычного javascript сработало.
Может ли кто-нибудь со знанием деталей реализации в gwt-exporter подтвердить мои предположения?