2

我在 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?

4

1 回答 1

4

使用com.google.jsinterop:baselib,这个 lib 应该包含任何 JsInterop 无法完成的实用程序,并且该 lib 将保持与 GWT 和 j2cl 的兼容性。这个库非常小(只有 10 个类,其中 2 个是内部的),所以只需将它添加到您的项目中并探索它的所有实用程序。

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

于 2017-07-06T13:51:49.070 回答