在Java中,有没有一种方法可以采用一个数组(这里是重要的部分),该数组采用一个数组-这是重要的部分,所以可以打印出其元素? 我尝试了很多方法,包括泛型,但是似乎无法绕开其中一些数组可能具有原始值的事实。

到目前为止,这是我所拥有的,尽管它没有编译有用,但它并没有那么有用:

    public static void dumpArray(Object a)
{
    for(int i = 0; i < a.length ; i++)
    {
        System.out.println(a[i]);
    }
}

这考虑到任何数组都是对象的子类型。

===============>>#1 票数:10

您可以使用Arrays.toString

它只是对每种基本类型的数组都有重载,而对Object[]又有一个重载。

static String toString(boolean[] a)
          Returns a string representation of the contents of the specified array.
static String toString(byte[] a)
          Returns a string representation of the contents of the specified array.
static String toString(char[] a)
          Returns a string representation of the contents of the specified array.
static String toString(double[] a)
          Returns a string representation of the contents of the specified array.
static String toString(float[] a)
          Returns a string representation of the contents of the specified array.
static String toString(int[] a)
          Returns a string representation of the contents of the specified array.
static String toString(long[] a)
          Returns a string representation of the contents of the specified array.
static String toString(Object[] a)
          Returns a string representation of the contents of the specified array.
static String toString(short[] a)
          Returns a string representation of the contents of the specified array.

如果确实需要将其作为单个方法而不是重载的集合,则必须具有Object类型的参数,并使用反射来查看实际类型是什么,然后调用适当的重载。

public static String toString(Object a) throws
    InvocationTargetException,
    NoSuchMethodException,
    IllegalAccessException
{
    Class clazz = Object[].class.isAssignableFrom(a.getClass())
         ? Object[].class : a.getClass();
    Method method = Arrays.class.getMethod("toString", new Class[] { clazz } );
    return (String)method.invoke(null, new Object[] { a });
}

看到它在线上工作: ideone

===============>>#2 票数:1

public static void dumpArray(Object[] a)
{
    for(int i = 0; i < a.length ; i++)
    {
        System.out.println(a[i]);
    }
}

您只需要更改参数,使其成为一个数组即可。 System.out.println(Object o)方法打印出o.toString(),在数字的情况下,它是与数字相对应的String。

例如,您可以使用其他循环将int []转换为Integer []。

===============>>#3 票数:1

是的,可以使用java.lang.reflect.Array来完成。 这是代码片段:

private static void printArray(Object array) {
    if(!array.getClass().isArray()) {
        throw new IllegalArgumentException();
    }
    int n = Array.getLength(array);
    for (int i = 0;  i < n;  i++) {
        System.out.println(Array.get(array, i));
    }
}

这是示例如何调用它:

    printArray(new int[] {1, 2, 3});
    printArray(new String[] {"aaa", "bbb"});

但这是一种“坏习惯”。 看一下Arrays.toString()实现,他们实现了Object[]一个版本和每种原始类型的特殊版本,尽管所有版本几乎都相同。

因此,如果您真的想使用我发布的解决方案,请考虑一下。

===============>>#4 票数:0

我认为,这再次证明了忽略类库中的内容有多么容易。

无需使用自己的代码,只需使用Arrays.deepToString()

  ask by varatis translate from so

未解决问题?本站智能推荐:

关注微信公众号