Saya setuju dengan komentar di atas tentang menimpa toString()
kelas Anda sendiri (dan tentang mengotomatiskan proses itu sebanyak mungkin).
Untuk kelas yang tidak Anda definisikan, Anda bisa menulis ToStringHelper
kelas dengan metode kelebihan beban untuk setiap kelas perpustakaan yang ingin Anda tangani sesuai selera Anda:
public class ToStringHelper {
//... instance configuration here (e.g. punctuation, etc.)
public toString(List m) {
// presentation of List content to your liking
}
public toString(Map m) {
// presentation of Map content to your liking
}
public toString(Set m) {
// presentation of Set content to your liking
}
//... etc.
}
EDIT: Menanggapi komentar oleh xukxpvfzflbbld, inilah kemungkinan implementasi untuk kasus yang disebutkan sebelumnya.
package com.so.demos;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class ToStringHelper {
private String separator;
private String arrow;
public ToStringHelper(String separator, String arrow) {
this.separator = separator;
this.arrow = arrow;
}
public String toString(List<?> l) {
StringBuilder sb = new StringBuilder("(");
String sep = "";
for (Object object : l) {
sb.append(sep).append(object.toString());
sep = separator;
}
return sb.append(")").toString();
}
public String toString(Map<?,?> m) {
StringBuilder sb = new StringBuilder("[");
String sep = "";
for (Object object : m.keySet()) {
sb.append(sep)
.append(object.toString())
.append(arrow)
.append(m.get(object).toString());
sep = separator;
}
return sb.append("]").toString();
}
public String toString(Set<?> s) {
StringBuilder sb = new StringBuilder("{");
String sep = "";
for (Object object : s) {
sb.append(sep).append(object.toString());
sep = separator;
}
return sb.append("}").toString();
}
}
Ini bukan implementasi penuh, tetapi hanya pemula.
AbstractCollection@toString
(dan dengan demikianString + Stack
) sudah mencetaknya seperti yang Anda inginkan.