在Java中是否有办法获得一个采用数组的方法 - 这里是重要部分 - 原始或非原始,并打印出其元素?我尝试了很多东西,包括泛型,但我似乎无法解决其中一些数组可能具有原始值的事实。
这是我到目前为止所拥有的,虽然它没有用,因为它没有编译:
public static void dumpArray(Object a)
{
for(int i = 0; i < a.length ; i++)
{
System.out.println(a[i]);
}
}
这考虑到任何数组都是对象的子类型。
答案 0 :(得分: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
类型的参数并使用反射来查看实际的内容type是然后调用适当的重载。
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
答案 1 :(得分: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 []。
答案 2 :(得分: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"});
但这是一种不良做法&#34;。看一下Arrays.toString()
的实现,他们为Object[]
实现了一个版本,并为每个基本类型实现了特殊版本,尽管所有版本几乎相同。
所以,如果你真的想要使用我发布的解决方案,请好好想想。
答案 3 :(得分:0)
我认为这再一次证明了忽略类库中的某些东西是多么容易。
不要使用自己的代码,只需使用Arrays.deepToString()
即可。