Apache - commons lang 3 - toString über ReflectionToStringBuilder für Arrays

#1 von Falk , 20.10.2016 14:50

Hallo,

ich bin bin bisher ganz zufrieden mit der toString-Umwandlung von unbekannten Objekten mittels Apache-commons-lang3 und dem ReflectionToStringBuilder.

Jetzt bin ich aber darauf gestoszen, dass mir diese Bibliothek für ein Objekt mit einer List das Ergebnis 'ArrayList[size=2]' liefert. Die dafür genutzte Einstellung sieht wie folgt aus:

1
2
3
4
5
 
        setArrayContentDetail(true);
setUseShortClassName(true);
setUseClassName(true);
setUseIdentityHashCode(false);
setFieldSeparator(", ");
 



Weil 'ArrayContentDetail' auf 'true' steht, hätte ich gedacht, die einzelnen Elemente der Liste werden auch per Reflection bearbeitet.

Zudem habe ich neben dem 'ToStringStyle' den 'RecursiveToStringStyle' verwendet - jedoch ohne Erfolg.

Falk

Falk  
Falk
Beiträge: 23
Registriert am: 20.09.2016


RE: Apache - commons lang 3 - toString über ReflectionToStringBuilder für Arrays

#2 von Falk , 25.10.2016 15:27

Ich habe herausgefunden, dass die ArrayLists nur dann verkürzt (nur mit size-Angabe) angezeigt wurden, wenn das Objekt selber eine ArrayList ist.

Wenn die ArrayList stattdessen in einem anderen Objekt enthalten ist, wird wie gewünscht der Inhalt auch zum String umgewandelt.

Als Übergangslösung kann man alle ArrayListen in Vectoren konvertieren.

1
2
3
4
5
6
7
8
9
10
11
 
ReflectionToStringBuilder reflectionToStringBuilder = null;
 
if (obj instanceof List<?>) {
@SuppressWarnings("unchecked")
List<Object> newList = new Vector<Object>((List)obj);
reflectionToStringBuilder = new ReflectionToStringBuilder(newList, new MultilineRecursiveToStringStyle());
}
else {
reflectionToStringBuilder = new ReflectionToStringBuilder(obj, new MultilineRecursiveToStringStyle());
}
return reflectionToStringBuilder.toString();
 



Anmerkung: Die Nutzung des MultilineStyles ist ab der Version 3.5 möglich, da diese Klasse in den vorherigen Versionen Package-Private ist.

Falk  
Falk
Beiträge: 23
Registriert am: 20.09.2016


   

javaslang

Xobor Einfach ein eigenes Xobor Forum erstellen
Datenschutz