我想从使用编译器标志-XjsInteropMode JS
迁移,但我遇到了问题。GWT JsInterop迁移
我有一个名为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-beta?尝试使用'GWT 2.8-rc2'并且正确的'XjsInteropMode JS'标志被重命名为''-generateJsInteropExports' –
我有2.8.0-beta,现在尝试2.8.0-rc2并且想要最终从XjsInteropMode移动,但现在我得到该ClassCastException。由于我使用我的帖子中指定的文档进行迁移,因此我设置了新的标志“-generateJsInteropExports”。用新标志尝试了两个版本,但错误是一样的。 –
你可以更新与确切的例外职位? –