当前位置: 首页 > 知识库问答 >
问题:

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

都浩淼
2023-03-14

我有一个处理M×N矩阵的简单程序。当完成处理后,我想打印出标准输出的矩阵。我知道我可以写一些方法比如static[void/String]matrix print(int[][]my matrix)来打印出矩阵或者返回它的字符串表示。

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

有没有一种简单的方法可以做到这一点,而无需创建另一个扩展数组的类?还是有其他方法可以从Java的内置类中优雅地打印出对象?

共有3个答案

傅英喆
2023-03-14

< code>Arrays类有许多用于打印数组的实用程序。然而,它们依赖于您对打印数组的默认Java格式感到满意。如果你想做任何特定的事情,你需要写你自己的方法

Java8个流提供了一些不错的特性,您无需显式迭代即可使用这些特性。例如:

Arrays.stream(matrix)
    .map(row -> Arrays.stream(row).collect(Collectors.joining("\t"))
    .forEach(System.out::println);
芮安顺
2023-03-14

简短的回答是“不”。

为了覆盖一个方法,您需要扩展一个类。Java没有扩展数组的语法,即您不能编写

class MyClass extends String[] { // <<= This will not compile
    ...
}

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

叶经略
2023-03-14

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

那可能看起来像,

System.out.println(Arrays.deepToString(myMatrix));
 类似资料:
  • 我正在开发一个Java中的图形库(https://github.com/aisthesis/java-graph2012 完整的上下文),并且需要覆盖权重边缘类的hashCode(),其中边缘不定向。也就是说,我设置了我的 equals() 覆盖方法,以便对于 2 个加权边 e1 和 e2,如果以下条件之一成立(from() 和 to() 方法返回边的尾部和头顶点),则它们相等: e1.从() =

  • 本文向大家介绍轻松学习C#的String类,包括了轻松学习C#的String类的使用技巧和注意事项,需要的朋友参考一下 字符串是由零个或多个字符组成的有限序列,是几乎所有编程语言中可以实现的非常重要和有用的数据类型。在C#语言中,字符串是System.String类的一个引用类型,但与其他引用类型不同的是,C#将字符串视为一个基本类型,可以声明为一个常量,并可以直接赋值。由于C#中的字符串是由Sy

  • 然后我们有这样的服务: 我的第一个bean是由@repository注释创建的,另一个bean是在Spring配置类中声明的: 如果我运行我的应用程序,SomeServiceImpl中的属性someDaoAnotherDataSource没有在配置类中声明我的bean,而是用注释存储库声明了bean。

  • 问题内容: 除了无法找到设置“ this”变量的好方法之外,我对Javascript有很好的理解。考虑: 没有最后四行,有没有办法做到这一点?这很烦人……我试图绑定一个匿名函数,我认为它是美丽而聪明的,但无济于事: 显然,将变量传递到myFunction是一个选项……但这不是这个问题的重点。 谢谢。 问题答案: 为JavaScript中的所有函数定义了两种方法,和。函数语法如下: 这些函数的作用是

  • 本文向大家介绍轻松学习C#的密封类,包括了轻松学习C#的密封类的使用技巧和注意事项,需要的朋友参考一下 密封类概述        并不是所有的类都可以被继承,C#语言中就是密封类。在C#语言中我们可以把类声明为sealed。这表示不能继承该类,如果想要继承那么编译器肯定会报错。在把类或方法标记为sealed时,最可能出现的情形时:如果要对库,类或自己编写的其他类进行操作,则重写某些功能会导致编译错

  • 本文向大家介绍轻松学习C#的抽象类,包括了轻松学习C#的抽象类的使用技巧和注意事项,需要的朋友参考一下 在C#语言中有一种特殊的基类,那就是抽象类。有时候,基类并不与具体的事物联系,而是只是表达一种抽象的概念,用于为它的派生类提供一个公共的界面。为此,C#中引入了抽象类和抽象方法的概念。        抽象类概述        抽象类提供多个派生类共享基类的公共定义,它既可以提供抽象方法,也可以提