Я пытаюсь перейти от использования флага компилятора -XjsInteropMode JS
, но у меня возникает проблема.GWT JsInterop migration
У меня есть интерфейс, который называется Module
который выглядит следующим образом:
@JsType
public interface Module {
@JsProperty
String getBasename();
}
Тогда у меня есть еще один интерфейс, называемый AuthenticationModule
, который выглядит следующим образом:
@JsType
public interface AuthenticationModule extends Module {
static final String MODULE_NAME = "authentication";
void logIn(String username, String password, JsConsumer<JavaScriptObject> onSuccess, JsConsumer<JavaScriptObject> onError);
void logOut(JsConsumer<JavaScriptObject> onSuccess, JsConsumer<JavaScriptObject> onError);
}
Интерфейсный модуль просто интерфейс маркер, поэтому, когда я загружал какой-то модуль, я смог вставить его в конце в модуль, который мне нужен, например здесь:
@Override
public void getAuthenticationModule(
OnModuleLoaded<AuthenticationModule> onModuleLoaded) {
initializeIfNecessary();
JsArrayString requiredModules = JavaScriptObject.createArray().cast();
requiredModules.push(AuthenticationModule.MODULE_NAME);
modules.require(requiredModules, loadedModule -> {
onModuleLoaded.moduleLoaded((AuthenticationModule) loadedModule); // this line (the casting) throws ClassCastException
});
}
modules
в этом коде другой интерфейс, который выглядит следующим образом:
@JsType
public interface Modules {
@JsFunction
@FunctionalInterface
interface CallbackRequire {
void apply(Module module);
}
@JsProperty
String getBase();
@JsProperty
void setBase(String base);
void require(JsArrayString modules, CallbackRequire onload);
}
Я следовал правилам о том, как мигрировать в этом документе: https://docs.google.com/document/d/10fmlEYIHcyead_4R1S5wKGs1t2I7Fnp_PaNaa7XTEk0/edit#
я не смог решить эту проблему. Лучшее, что я мог получить, это изменить @JsType
на @JsType(isNative = true)
. Затем кастинг работал, но произошла еще одна ошибка, теперь я не могу вспомнить, но я не уверен, действительно ли isNative - это правильный способ решить эту проблему.
какая версия GWT вы используете? GWT 2.8-бета? Попытайтесь использовать 'GWT 2.8-rc2', а также правильный флаг' XjsInteropMode JS' был переименован в '-generateJsInteropExports' –
У меня была 2.8.0-бета, теперь попробовала 2.8.0-rc2 и захотелось наконец перейти от XjsInteropMode , но теперь я получаю это ClassCastException. Поскольку я использовал документ, указанный в моем сообщении для переноса, у меня установлен новый флаг «-generateJsInteropExports». Пробовал обе версии с новым флагом, но ошибка одна и та же. –
Можете ли вы обновить сообщение с точным Исключением? –