2017-07-06 119 views
2

我創建了JsInterop自己的自定義數組:JsInterop - 獲得值在陣列

@JsType(isNative = true, namespace = JsPackage.GLOBAL, name = "Array") 
public interface Array<T> 
{ 
    public void push(T value); 

    @JsProperty(name = "length") 
    public int getLength(); 

    @JsProperty(name = "length") 
    void setLength(int newLength); 

    @JsOverlay 
    default T get(int index) { 
     return JsArrayHelper.getArrayValue(this, index); 
    } 
} 

這裏是JsArrayHelper類縮減:

public class JsArrayHelper 
{ 
    //TODO: Eliminate JSNI. Better way to do this? 
    public static native <T> T getArrayValue(Array<T> a, int i) /*-{ 
     return a[i]; 
    }-*/; 
} 

有沒有更好的方式來獲得價值的數組而不是使用JSNI?

回答

3

使用com.google.jsinterop:base lib,這個庫應該包含任何無法用JsInterop完成的實用工具,並且lib將保持與GWT和j2cl的兼容性。這個庫很小(只有10個類,其中2個是內部的),所以只需將它添加到您的項目中,並探索其所有實用程序。

因此,而不是您的自定義Array<T>.get(int)JsArrayHelper類使用jsinterop.base.JsArrayLike<T>.getAt(int)

+0

謝謝。現在嘗試一下。我假設我也需要繼承:jsinterop.base.Base。但是我得到這個錯誤:「沒有源代碼可用於類型jsinterop.base.JsArrayLike ;你忘了繼承一個必需的模塊嗎?」 –

+0

我認爲你需要使用GWT 2.8.1。 –