我想要訪問當前處於JavaScriptObject屬性但轉換失敗的Java對象。這是我做的:將JavaScriptObject轉換爲Java對象在GWT中失敗
public static native MyJavaObject getMyObject(JavaScriptObject obj) /*-{
return obj['myProp'];
}-*/;
obj.myProp是一個Java對象,它是由Java構造函數創建的(它在Javascript中可見,因爲它被導出)。運行上述代碼時的結果是在開發模式下的java.lang.ClassCastException。
但是,如果像下面這樣做並訪問祕密屬性g它的作品!看起來,gwt在轉換返回值時不會移除包裝器。
public static native MyJavaObject getMyObject(JavaScriptObject obj) /*-{
return obj['myProp'].g;
}-*/;
上面的代碼工作,但它不是一個解決方案,因爲它使用gwt中的實現細節。我究竟做錯了什麼?
感謝/約翰
通過測試發現的一些新的結論:
看來問題依賴於GWT出口國出口,因爲我預計在本機代碼不會被轉換的對象。
- 導出的對象被包裝並且原始對象存儲在名爲g的屬性中。
- 由於GWT不知道這個,它不能從包裝的導出對象中檢索原始對象。
- 當通過導出的接口進行包裝和解包時是自動的。
- 這個異常似乎是在本機方法中執行處理導出對象的代碼時。本機方法的行爲與定義爲javascript的代碼行爲不同,因爲它們似乎無法處理導出解包。這是通過嘗試調用導出對象作爲參數的導出方法找到的。它從本機代碼失敗,但從普通的JavaScript工作相同。
有人可以知道gwt-exporter中的實現細節來確認我的假設嗎?
Do MyJavaObject是否擴展了JavaScriptObject? 如果不這樣做,請嘗試這樣做。 – Nicocube 2012-02-29 16:58:51
請勿嘗試這樣做,或者確保使用適當的JSNI表示法引用該媒體資源,請參閱http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html#methods-fields – 2012-02-29 20:54:27