很抱歉新手问题,我已经习惯了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中数组的继承树是什么?
非常感谢
骨
答案 0 :(得分:6)
数组仅在Java 1 中实现Serializable
和Cloneable
;所以没有通用的方法来做到这一点。您必须为每种类型的数组实现一个单独的方法(因为像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()
功能可以接收Collection
或Iterable
并以此方式进行迭代。
答案 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 statement和Interface Iterable
正如其他人所评论的那样,遗憾的是Array并未实现Iterable<E>
。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 )