[英]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.