【发布时间】:2011-08-17 05:50:30
【问题描述】:
我想要一个可以循环任何类型数组并打印它们的方法,我写了以下内容:
public static <T> void printArray(T[] arr){
for(T t: arr){
System.out.print(t+" ");
}
System.out.println("");
}
但是这个只适用于类数组,如果我有一个char[] 而不是一个Character[],或者一个int[] 而不是一个Integer[],或者有什么办法可以预先将它们转换?谢谢
【问题讨论】:
-
用 t.toString() 代替 t+ 怎么样
-
不幸的是 array.toString() 只是调用了 Object.toString() 并且你得到了类似
[C@e6f8730我建议 JDK 7 硬币项目负责人他解决了这个问题,但我没有把它卖给他. ;) -
@Peter Lawrey 好建议。他们反对的理由是什么?每个人都可以充分利用该哈希值吗?
-
他们说你可以使用 Arrays.toString/equals/hashCode 来做你想做的事。我指出 Sun/Oracle 为数组提供了 9 个不同的帮助程序类,包括各种包中的 Array/Arrays/ArrayUtils,而且对于刚接触 Java 的人来说,这简直是一团糟。 (更不用说 Apache commons 和 Guava)事实上,您可以破解/扩展 Object 来修复 toString() 等,并且 Idea/编译器接受它,但它是一个丑陋的 hack。所以恕我直言,这并没有那么大的变化,因为您无需更改 JVM 或 IDE 即可使其正常工作。
-
我听说 Joshua Bloch 看过这个,我听说他觉得要真正做好这件事太复杂了。
标签: java arrays generics methods