При использовании GWT JSNI в чем разница между JavaScriptObject и Element в качестве типа параметра для метода JSNI?

Рассмотрим следующий метод:

native void method(JavaScriptObject inputFile) /*-{

}-*/;

И этот:

native void method(Element inputFile) /*-{

}-*/;

Есть ли какие-либо различия для внутренней функции JSNI, если я использую JavaScriptObject или Element?

1
confile 10 Янв 2014 в 20:46

1 ответ

Лучший ответ

Element - это JavaScriptObject, но обратное неверно, не все объекты java-скрипта являются элементами dom.

С точки зрения Java это важно - он гарантирует, что вы не передадите что-то, что не имеет смысла, например, экземпляр Window или некоторые данные json, а только то, что на самом деле является элементами.

С точки зрения JavaScript внутри метода JSNI это не имеет значения, поскольку JS не понимает типы в этих терминах и ожидает, что любой переданный объект имеет правильные методы и поля.

При прочих равных, будьте яснее - используйте Element, когда это имеет смысл, или, по крайней мере, добавьте javadocs или назовите параметр, чтобы быть понятным. Ни Java, ни GWT, ни Javascript не позаботятся о том, чтобы вы указали JSO вместо Element, хотя, если вы случайно передадите не-Element, а для метода потребуется элемент, вы можете получить ошибку.

6
Colin Alworth 10 Янв 2014 в 21:05