轻松覆盖Java的toString()';s内置类
我有一个简单的程序来处理一个M x N矩阵。处理完成后,我想将矩阵打印到标准输出。我知道我可以编写一些方法,例如static[void/String]matrixPrint(int[]]myMatrix)来打印矩阵或返回矩阵的字符串表示形式 然而,我认为更优雅的解决方案是重写Arrays类中的toString()方法。这样我就可以调用System.out.println(myMatrix),在我看来,它比上述任何一种代码都更清晰、更优雅轻松覆盖Java的toString()';s内置类,java,arrays,Java,Arrays,我有一个简单的程序来处理一个M x N矩阵。处理完成后,我想将矩阵打印到标准输出。我知道我可以编写一些方法,例如static[void/String]matrixPrint(int[]]myMatrix)来打印矩阵或返回矩阵的字符串表示形式 然而,我认为更优雅的解决方案是重写Arrays类中的toString()方法。这样我就可以调用System.out.println(myMatrix),在我看来,它比上述任何一种代码都更清晰、更优雅 有没有一种简单的方法可以做到这一点,而无需创建另一个扩展数
有没有一种简单的方法可以做到这一点,而无需创建另一个扩展数组的类?或者,还有其他方法可以从Java的内置类优雅地打印出对象吗?您不能覆盖数组的
toString()
(它没有实现)。但是,可以使用返回指定数组的“深层内容”的字符串表示形式的。如果数组包含其他数组作为元素,则字符串表示形式包含其内容,依此类推。此方法用于将多维数组转换为字符串
那可能看起来像
System.out.println(Arrays.deepToString(myMatrix));
Arrays
类有许多用于打印数组的实用程序。但是,它们依赖于您对打印数组的默认Java格式感到满意。如果您想做任何特定的事情,您需要编写自己的方法
Java8流提供了一些很好的特性,无需显式迭代即可使用。例如:
Arrays.stream(matrix)
.map(row -> Arrays.stream(row).collect(Collectors.joining("\t"))
.forEach(System.out::println);
简短的回答是“不”
为了重写一个方法,您需要扩展一个类。Java没有扩展数组的语法,即不能编写
class MyClass extends String[] { // <<= This will not compile
...
}
class MyClass扩展字符串[]{//