Ich versuche, von Compiler-Flag -XjsInteropMode JS
zu migrieren, aber ich stoße auf ein Problem.GWT JsInterop Migration
Ich habe eine Schnittstelle namens Module
die wie folgt aussieht:
@JsType
public interface Module {
@JsProperty
String getBasename();
}
Dann habe ich eine andere Schnittstelle namens AuthenticationModule
, die wie folgt aussieht:
@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);
}
Das Modul Interface-Schnittstelle nur ein Marker ist, Wenn ich also ein Modul geladen habe, war ich in der Lage, es am Ende auf ein Modul zu übertragen, das ich wollte, Beispiel hier:
@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
in diesem Code ist eine weitere Schnittstelle, die wie folgt aussieht:
@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);
}
ich die Regeln auf, gefolgt wie in diesem Dokument zu migrieren: https://docs.google.com/document/d/10fmlEYIHcyead_4R1S5wKGs1t2I7Fnp_PaNaa7XTEk0/edit#
Ich war nicht in der Lage, dieses Problem zu lösen. Das Beste, was ich bekommen konnte, war @JsType
zu @JsType(isNative = true)
zu ändern. Dann hat das Casting funktioniert, aber ein weiterer Fehler ist aufgetreten, ich kann mich jetzt nicht erinnern, aber ich bin mir nicht sicher, ob das isNative wirklich der richtige Weg ist, um dieses Problem zu lösen.
Welche GWT-Version verwenden Sie? GWT 2.8-Beta? Versuchen Sie 'GWT 2.8-rc2' zu verwenden und auch das' XjsInteropMode JS' Flag wurde in '-generateJsInteropExports' umbenannt. –
Ich hatte 2.8.0-beta, jetzt versuchte 2.8.0-rc2 und wollte endlich aus dem XjsInteropMode wechseln , aber jetzt bekomme ich diese ClassCastException. Da ich das in meinem Post angegebene Dokument zur Migration verwendet habe, habe ich das neue Flag "-generateJsInteropExports" gesetzt. Versuchte beide Versionen mit der neuen Flagge, aber der Fehler ist der gleiche. –
Können Sie den Beitrag mit der genauen Ausnahme aktualisieren? –