繁体   English   中英

为Java的内置类轻松覆盖toString()

[英]Easily overriding toString() for Java's built-in classes

我有一个处理M×N矩阵的简单程序。 完成处理后,我想将矩阵打印到标准输出。 我知道我可以编写一些方法,例如static [void / String] matrixPrint(int [] [] myMatrix)来打印矩阵或返回它的String表示。

但是我认为更优雅的解决方案是覆盖Arrays类中的toString()方法。 这样我就可以调用System.out.println(myMatrix),这在我看来比上面的任何一个都更清晰优雅。

是否有一种简单的方法可以在不创建扩展数组的另一个类的情况下执行此操作 或者还有其他方法可以优雅地从Java的内置类中打印出对象吗?

你不能覆盖数组的toString() (它没有实现一个)。 但是,您可以使用Arrays.deepToString(Object[]) ,它返回指定数组的“深层内容”的字符串表示形式。 如果数组包含其他数组作为元素,则字符串表示包含其内容,依此类推。 此方法用于将多维数组转换为字符串。

这可能看起来像,

System.out.println(Arrays.deepToString(myMatrix));

Arrays类有许多用于打印数组的实用工具。 但是,它们依赖于您对打印阵列的默认Java格式感到满意。 如果你想做任何具体的事情,你需要编写自己的方法。

Java 8流提供了一些很好的功能,您可以使用它们而无需显式迭代。 例如:

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
    ...
}

但是, Arrays类提供了一种字符串转换方法 ,可以处理任何类型的数组。 这是用Java打印数组的惯用方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM