用于打印数组中所有元素的通用方法

时间:2011-05-02 20:06:20

标签: java arrays generics methods

我想要一个循环任何类型数组并打印它们的方法,我写了以下内容:

public static <T> void printArray(T[] arr){
    for(T t: arr){
       System.out.print(t+" ");
    }
    System.out.println("");
}

但是这个只适用于类数组,如果我有char[]而不是Character[],或int[]而不是Integer[],或者是一种方法来预先施展他们?感谢

4 个答案:

答案 0 :(得分:26)

java.util.Arrays.toString(array)应该这样做。

  • commons-lang也有 - ArrayUtils.toString(array)(但更喜欢JDK)
  • commons-lang允许自定义分隔符 - StringUtils.join(array, ',')
  • guava还允许使用分隔符,并且可以选择跳过空值:Joiner.on(',').skipNulls().join(array)

所有这些都会返回String,然后您可以System.out.println(..)logger.debug(..)。请注意,如果数组元素以有意义的方式实现toString(),这些将为您提供有意义的输入。

最后两个选项,唉,不支持原始数组,但是很好的选择要知道。

答案 1 :(得分:2)

您无法为原始数组编写通用定义。相反,您可以使用方法重载并为每个基本数组类型编写一个方法,如下所示,

public static void printArray(int[] arr)
public static void printArray(short[] arr)
public static void printArray(long[] arr)
public static void printArray(double[] arr)
public static void printArray(float[] arr)
public static void printArray(char[] arr)
public static void printArray(byte[] arr)
public static void printArray(boolean[] arr)

答案 2 :(得分:1)

private static void printArray(Object arr) {
        // TODO Auto-generated method stub
        String arrayClassName=arr.getClass().getSimpleName();
        if (arrayClassName.equals("int[]"))
            System.out.println(java.util.Arrays.toString((int[]) arr));
        if (arrayClassName.equals("char[]"))
            System.out.println(java.util.Arrays.toString((char[]) arr));
    }

答案 3 :(得分:0)

您无法将原始数组传递给printArray()方法