在Java中,数组继承了什么?我可以这样做吗?

dbo*_*nes 4 c# java arrays

对不起新手问题,我习惯了C#,所以我的Java框架知识不太好.

我有几个数组:

int[] numbers = new int[10];
String[] names = new String[10];

//populate the arrays
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个泛型函数,它将打印出这些数组中的值,如下所示(这应该适用于C#)

private void PrintAll(IEnumerable items)
{    
    foreach(object item in items)       
        Console.WriteLine(item.ToString());
} 
Run Code Online (Sandbox Code Playgroud)

我现在所要做的就是

PrintAll(names);
PrintAll(numbers);
Run Code Online (Sandbox Code Playgroud)

我怎么能用Java做到这一点?Java中数组的继承树是什么?

非常感谢

骨头

Mic*_*ers 6

数组只实现SerializableCloneableJava中1 ; 所以没有通用的方法来做到这一点.您必须为每种类型的数组实现一个单独的方法(因为原始数组int[]不能被转换为Object[]).

但在这种情况下,您没有必要,因为Arrays可以为您做到:

System.out.println(Arrays.toString(names));
System.out.println(Arrays.toString(numbers));
Run Code Online (Sandbox Code Playgroud)

这将产生类似于:

[Tom, Dick, Harry]
[1, 2, 3, 4]

如果这还不够好,你就不得不为每种可能的数组类型实现一个版本的方法,就像Arrays这样.

public static void printAll(Object[] items) {
    for (Object o : items)
        System.out.println(o);
}
public static void printAll(int[] items) {
    for (int i : items)
        System.out.println(i);
}
public static void printAll(double[] items) {
    for (double d : items)
        System.out.println(d);
}
// ...
Run Code Online (Sandbox Code Playgroud)

请注意,以上仅适用于数组.Collection实现Iterable,所以你可以使用:

public static <T> void printAll(Iterable<T> items) {
    for (T t : items)
        System.out.println(t);
}
Run Code Online (Sandbox Code Playgroud)

1请参见JLS§10.7阵列成员.