コンパイラフラグ-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
はこのようになります別のインターフェイスである: https://docs.google.com/document/d/10fmlEYIHcyead_4R1S5wKGs1t2I7Fnp_PaNaa7XTEk0/edit#
私はこの問題を解決することができませんでした:
@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);
}
私は、この文書に移行する方法についての規則に従いました。私が得られる最高のものは@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」が設定されています。両方のバージョンを新しいフラグで試しましたが、エラーは同じです。 –
投稿を正確な例外で更新できますか? –