对不起新手问题,我习惯了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中数组的继承树是什么?
非常感谢
骨头
数组只实现Serializable和CloneableJava中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阵列成员.