轻松覆盖Java的toString()';s内置类

轻松覆盖Java的toString()';s内置类,java,arrays,Java,Arrays,我有一个简单的程序来处理一个M x N矩阵。处理完成后,我想将矩阵打印到标准输出。我知道我可以编写一些方法,例如static[void/String]matrixPrint(int[]]myMatrix)来打印矩阵或返回矩阵的字符串表示形式 然而,我认为更优雅的解决方案是重写Arrays类中的toString()方法。这样我就可以调用System.out.println(myMatrix),在我看来,它比上述任何一种代码都更清晰、更优雅 有没有一种简单的方法可以做到这一点,而无需创建另一个扩展数

我有一个简单的程序来处理一个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扩展字符串[]{//