我想從使用編譯器標誌-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」。用新標誌嘗試了兩個版本,但錯誤是一樣的。 –
你可以更新與確切的例外職位? –