使用toString()方法返回对象

时间:2015-02-05 18:06:59

标签: java class

我有一个调用类方法的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方法的目的,并且它仍然在输出的开头返回'['。

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

4 个答案:

答案 0 :(得分:1)

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

  

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

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

答案 1 :(得分:0)

  

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

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

  

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

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

  

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

这是一个更好的主意。使用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);
}

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

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