使用toString()方法返回对象

3

我有一个主方法,它调用一个类方法;

CourseListQ2 list = new CourseListQ2();

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

在我编写的这个类中,我从主方法创建了一个对象数组,然后扩展了它并删除了我不需要的值。接着,我编写了一个toString方法,它应该在每一行返回一个对象:

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

然而,它将整个数组返回在一行上。所以显然,我没有完全理解这个方法的作用。
我有两个想法,要么我应该尝试将每个元素作为一个对象返回,例如 getName().toString(arrayCourses) + getYear().toString(arrayCourses) + "\n",
或者,也许我应该创建一个循环来添加一个新行。但我认为这会违背使用 toString 方法的目的,并且它仍然在输出开头返回 '['。
那么,有人能解释为什么会发生这种情况,并可能提出更好的方法吗?

1
只需编写自己的 toString() 方法。听起来你走在了正确的轨道上。 - tnw
4个回答

1
在你的示例Arrays.toString(arrayCourses)中,你调用了Arrays类的toString()方法,以下是Java Docs对该方法的说明:
返回指定数组内容的字符串表示形式。字符串表示形式由数组元素列表组成,括在方括号(“[]”)中。相邻元素由字符“, ”(逗号后跟一个空格)分隔。元素按String.valueOf(float)转换为字符串。如果a为空,则返回“null”。
对于这种方法,我建议遵循@dasblinkenlight的建议。

0
我对这个方法的确切作用存在误解。
Arrays.toString将数组格式化为单个字符串,其中单个元素的字符串表示由逗号分隔。
“要么我应该尝试将每个返回为对象,例如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);
}

0

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

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

0
在Java中,每个对象都有一个toString()方法(如果您没有编写,则提供默认方法)。
如果我们尝试在集合对象上运行toString(),它会在所有对象上运行toString()方法,并将它们用逗号分隔打印在[]之间。
如果您想要自己的实现,那么我建议重写toString()方法以按您想要的方式打印值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接