如何使用 Parcelable 发送多维数组?

发布于 12-22 13:19 字数 73 浏览 4 评论 0原文

我应该使用 Parcelable 吗?因为这似乎不接受多维数组,例如 int[][]

(我需要在活动之间发送数据)

Should I use Parcelable? Because that does not seem to accept multi-dimensional arrays like for example int[][]

(I need to send data between activities)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

那支青花2024-12-29 13:19:44

数组在 Java 中是协变的(它们都扩展了 Object)。
因此,您可以将数组的数组(例如 int[][])分配给 Object[] 数组,因为数组是一个对象:int [][] 表示 int[] 数组,而 int[] 是一个 Object

对于泛型,如果您有一个类型 T 和一个数组 T[],则将 T 定义为 int[]会导致该数组恰好是 int[][]

希望这有帮助。

Arrays are covariant in Java (and they all extend Object).
Therefore, you can assign an array of arrays (like int[][]) to an Object[] array, simply because an array is an object: int[][] means an array of int[] and int[] is an Object.

With generics, if you have a type T and an array T[], defining T as int[] would result in that array being exactly int[][].

Hope this helps.

等数载,海棠开2024-12-29 13:19:44

我知道这对游戏来说已经很晚了,但这是我使用的解决方案:

private void write2DimArray(int[][] array, Parcel parcel) {
    parcel.writeInt(array.length);
    for(int[] arrayDim1 : array) {
        parcel.writeInt(arrayDim1.length);
        parcel.writeIntArray(arrayDim1);
    }
}

private int[][] read2DimArray(Parcel parcel) {
    int[][] array = new int[parcel.readInt()][];
    for(int i = 0; i < array.length; i++) {
        int arraySize = parcel.readInt();
        array[i] = new int[arraySize];
        parcel.readIntArray(array[i]);
    }
    return array;
}

I know that this is quite late to the game, but this is the solution I used:

private void write2DimArray(int[][] array, Parcel parcel) {
    parcel.writeInt(array.length);
    for(int[] arrayDim1 : array) {
        parcel.writeInt(arrayDim1.length);
        parcel.writeIntArray(arrayDim1);
    }
}

private int[][] read2DimArray(Parcel parcel) {
    int[][] array = new int[parcel.readInt()][];
    for(int i = 0; i < array.length; i++) {
        int arraySize = parcel.readInt();
        array[i] = new int[arraySize];
        parcel.readIntArray(array[i]);
    }
    return array;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文