すべての 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]
したがって、私は2つの解決策を念頭に置いています。
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();
}
この 2 番目の選択肢は、本当に可能な限り最良の方法ですか? または、私が採用すべき別のアプローチはありますか?toString
これらのメソッドがloop
ステートメントから呼び出されていると考えてください。
残念ながら、私はメモリ テストにあまり詳しくないので、そのためのテストを書くことができれば、それについて知りたいと思います。
前もって感謝します。