繁体   English   中英

使用toString()方法返回对象

[英]Returning Objects with toString() method

我有一个调用类方法的main方法;

CourseListQ2 list = new CourseListQ2();

list.addCourse(new Course("Structure and Modelling", "Chemistry", 1));
list.addCourse(new Course("Design in Engineering", "Engineering", 1));
......

在我写的这个类中,我从main方法创建了一个对象数组,然后将其展开并删除了我不需要的值。 然后,我编写了一个toString方法,该方法假设返回一个新行上的每个对象:

public String toString(){
      return  Arrays.toString(arrayCourses) ;}

但是,它将整个阵列返回到一行。 显然,我误解了这种方法究竟做了什么。

我有两个想法,要么我想尝试将每个作为对象返回,比如getName()。toString(arrayCourses)+ getYear()。toString(arrayCourses)+“\\ n”,

或者,也许我想创建一个添加新行的循环。 然而,我认为这违背了使用toString方法的目的,并且它仍然在输出的开头返回'['。

那么,任何人都可以解释为什么会发生这种情况并提出更好的方法吗?

在您的示例Arrays.toString(arrayCourses)您正在调用Arrays类的toString()方法,下面是Java Docs对该方法的说法:

返回指定数组内容的字符串表示形式。 字符串表示由数组元素的列表组成,用方括号括起来(“[]”)。 相邻元素由字符“,”(逗号后跟空格)分隔。 通过String.valueOf(float)将元素转换为字符串。 如果a为null,则返回“null”。

对于这种方法,我建议@dasblinkenlight建议。

我错误地解释了这种方法究竟做了什么。

Arrays.toString将数组格式化为单个String ,其中各个元素的字符串表示以逗号分隔。

要么我想尝试将每个作为对象返回,比如getName().toString(arrayCourses) + getYear().toString(arrayCourses) + "\\n"

这不会完全解决问题,因为Arrays.toString插入的逗号将保留在那里。 通常,在toString实现中附加'\\n'不是一个好主意,因为它假设调用者将使用字符串的方式。

或者,也许我想创建一个添加新行的循环。

这是一个更好的主意。 使用StringBuilder ,并调用其append方法两次 - 首先是对象,第二次是\\n字符。

注意:不要直接附加'\\n' ,而是使用System.getProperty("line.separator"); 获取系统特定的行分隔符。

StringBuilder res = new StringBuilder();
String newLine = System.getProperty("line.separator");
for (Course c : arrayCourses) {
    res.append(c);
    res.append(newLine);
}

toString()方法中使用循环没有任何问题。 但是,如果使用Java8,则可以使用String.join 因此,如果您想在一行中使用每个元素

return String.join('\n', arrayCourses);

在Java中,每个对象都有一个toString()方法(如果你没有写一个,那么提供一个默认的)

如果我们尝试在集合对象上运行toString(),它会在所有对象上运行toString()方法,并在[]之间打印它们,用','分隔。

如果你想拥有自己的实现,那么我建议覆盖方法的toString()以你想要的方式打印值

暂无
暂无

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

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