使用toString方法和每个循环打印对象时要返回什么?

edw*_*ard 0 java foreach arraylist tostring object-to-string

我目前有一个toString方法,类似于下面的方法.请忽略对象仅被临时命名.我这样做是为了使每个变量的类型之间没有混淆等:

@Override
public String toString() {
    for(Object object : ArrayList) {
        System.out.println("This object is a " + object.getVariableA() + " and a " + object.getVariableB() + ".");
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

但是toString方法要求我返回一个值.我显然只想返回我正在打印的字符串,虽然如果我在那里放置一个返回语句,它只会打印一个Object而不是所有我正在循环的对象.什么是打印所有这些值的最佳方法,而不是简单地返回null,因为我不希望在所有对象之后打印出来?我还想确保这些对象中的每一个都按照它们当前的单独行打印,所以请不要建议包含一个长连接字符串而不包含换行符的解决方案,因为这不适合这种情况.

提前致谢!

T.J*_*der 7

toString不应该输出什么.它的工作是返回相关对象的适当字符串表示,而不是在任何地方输出该表示.这不在其问题领域.

相反,构建并返回一个字符串(可能使用a StringBuilder).

例如,像:

@Override
public String toString() {
    StringBuilder sb = new StringBuilder(some_appropriate_size);
    for(Object object : ArrayList) {
        sb.append("This object is a ")
          .append(object.getVariableA())
          .append(" and a ")
          .append(object.getVariableB())
          .append(".\n");
    }
    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

我还想确保这些对象中的每一个都打印在当前的单独行上,所以请不要建议包含一个长连接字符串的解决方案,因为这不适合这种情况.

上面将数组列表中的项放在单独的"行"上(通过\n).但是"一个长期加入String"是唯一合适的事情toString.如果你想要一个不同的结果,你必须使用不同的方法,而不是违反合同toString.

  • +1你正在附加内部进行字符串连接.:)将追加调用链接起来会更有效率. (2认同)