我正在开发一个项目,我的所有 POJO 都必须toString()
继承自Object class
重写。
考虑下面的不可变类:
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
中调用的那些方法。loop
不幸的是,我对内存测试不是很熟悉,所以如果可以为此编写测试,我会很高兴知道这一点。
提前致谢。