我正在开发一个项目,所有的POJO(普通Java对象)必须重写从Object类继承而来的toString()方法。
考虑下面这个不可变类:
public final class SomeActivity {
private final int id;
private final String name;
private final String description;
private final DateTime startDate;
private final DateTime endDate;
private final String note;
// Constructors and getters
// My future implementation of toString
}
当我重写toString()
方法时,我的目标是实现并输出类似于下面的输出(使用所有SomeActivity
类字段的测试值):
[Id: 1, Name: Read a book, Description: Trying to discover how to build a plane, StartDate: 17/10/2013, EndDate: 15/11/2013, Note: I really need this]
因此,我有两个解决方案:
1 - 字符串连接
据我所知,String
是一个不可变的类。(请参阅javadoc),因此,如果我实现一个接收这样的输出的方法,由于我的连接操作,可能会创建许多对象:
@Override
public String toString() {
String s = "[Id: " + id +
", Name: " + name +
", Description: " + description +
", StartDate: " + startDate +
", EndDate: " + endDate +
", Note: " + note +
"]";
}
2 - 使用StringBuilder
使用StringBuilder
方法,理论上,我将少实例化一些对象而不是“连接方法”。但请注意下面代码中的new StringBuilder
和toString()
调用:
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("[Id: ").append(id)
.append(", Name: ").append(name)
.append(", Description: ").append(description)
.append(", StartDate: ").append(startDate)
.append(", EndDate: ").append(endDate)
.append(", Note: ").append(note)
.append("]");
return builder.toString();
}
这第二种选择,真的是最好的选择吗?还是有其他方法我应该采用?考虑那些从循环语句中调用的toString方法。
不幸的是,我对内存测试不是很熟悉,如果可能的话,我很乐意了解如何编写这方面的测试。
提前致谢。
append
废话,它可能更容易阅读。) - Jon Skeet