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

时间:2009-12-08 16:37:28

标签: c# java arrays

很抱歉新手问题,我已经习惯了C#所以我的Java框架知识不太好。

我有几个阵列:

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

//populate the arrays

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

private void PrintAll(IEnumerable items)
{    
    foreach(object item in items)       
        Console.WriteLine(item.ToString());
} 

我现在要做的就是

PrintAll(names);
PrintAll(numbers);

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

非常感谢

5 个答案:

答案 0 :(得分:6)

数组仅在Java 1 中实现SerializableCloneable;所以没有通用的方法来做到这一点。您必须为每种类型的数组实现一个单独的方法(因为像int[]这样的基本数组不能转换为Object[])。

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

System.out.println(Arrays.toString(names));
System.out.println(Arrays.toString(numbers));

这会产生类似的结果:

[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);
}
// ...

请注意,上述内容仅适用于数组。 Collection实施Iterable,因此您可以使用:

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

1 请参阅JLS §10.7 Array Members

答案 1 :(得分:2)

正如其他答案所述,int[]String[]没有共同的超类可以让你这样做。您可以做的一件事是将数组包装到列表中,然后再将它们传递给PrintAll()函数。使用Arrays.asList(myArray)可以轻松完成此操作。然后,您的PrintAll()功能可以接收CollectionIterable并以此方式进行迭代。

答案 2 :(得分:1)

您可以尝试以下方法。

(它不适用于int类型,因为它是基本类型。您可以使用对象Integer代替。)

public void print(Object[] objects){
    for (Object o: objects){
        System.out.println(o);      
    }
}

答案 3 :(得分:0)

回答关于什么班级a look at the docs的问题。 java.lang.Object就是答案。

关于迭代应该知道的事情 - 看看Java enhanced for each statementInterface Iterable Iterable<E>正如其他人所评论的那样,遗憾的是Array并未实现Iterable<E>

答案 4 :(得分:0)

这是一种查找数组超类的方法(普通对象)

    String[] array = {"just", "a", "test"};

    Object obj = array;  // not really needed, just as example
    System.out.println("class: " + obj.getClass());
    System.out.println("super: " + obj.getClass().getSuperclass());

不是解决方案,而是回答问题(至少是标题) (我建议像mmyers一样完成Arrays.toString