Je suis d'accord avec les commentaires précédents concernant l'utilisation de l'option "overriding". toString()
sur vos propres classes (et d'automatiser ce processus autant que possible).
Pour les cours, vous n'a pas vous pourriez écrire un ToStringHelper
avec une méthode surchargée pour chaque classe de la bibliothèque que vous souhaitez gérer à votre guise :
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 : En réponse au commentaire de xukxpvfzflbbld, voici une implémentation possible pour les cas mentionnés précédemment.
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();
}
}
Il ne s'agit pas d'une mise en œuvre complète, mais seulement d'un point de départ.
9 votes
Au moins à partir de Java 7,
AbstractCollection@toString
(et doncString + Stack
) l'imprime déjà comme vous le souhaitez.0 votes
stackoverflow.com/questions/9174268/