将int[][]作为通用参数传递

20
public static <T> void func1(T[][] arr) {
    ...
}

public static <T> void func2(T[] arr) {
    ...
}

我试图传递一个二维数组,int[][] arr

我不能使用func1(arr),但我可以使用func2(arr)

有人能解释一下这是如何工作的吗?

2个回答

25

T[] 表示某个泛型对象的数组。任何数组类型(包括int[])都是一个对象。因此,当 T = int[] 时,int[][] 是有效的 T[]

然而,由于 int 不是一个对象,所以 int[][] 不是有效的 T[][]


4
要扩展这个话题,你可以将其更改为 Integer[][] arr;,然后它就应该可以工作了。 - LadyCailin
3
@LadyCailin 是的,但在大多数需要使用多维数组的情况下,使用包装类型是一个非常糟糕的想法。 - user1643723

2

如果你使用 Integer 而不是 int,你应该能够:

  • 使用 Integer[][] arr 调用 func1
  • 使用 Integer[] arrInteger[][] arr 调用 func2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接