Ich bin auf diesen Beitrag in Vanille #Java vor kurzem. Es ist nicht sehr bequem, zu schreiben Arrays.toString(arr);
und dann importieren java.util.Arrays;
Die ganze Zeit über.
Bitte beachten Sie, dass dies keineswegs eine dauerhafte Lösung ist. Nur ein Hack, der die Fehlersuche vereinfachen kann.
Das direkte Drucken eines Arrays ergibt die interne Darstellung und den HashCode. Jetzt haben alle Klassen Object
als übergeordneten Typ. Warum also nicht die Object.toString()
? Ohne Änderung sieht die Klasse Object wie folgt aus:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Was wäre, wenn dies geändert würde in:
public String toString() {
if (this instanceof boolean[])
return Arrays.toString((boolean[]) this);
if (this instanceof byte[])
return Arrays.toString((byte[]) this);
if (this instanceof short[])
return Arrays.toString((short[]) this);
if (this instanceof char[])
return Arrays.toString((char[]) this);
if (this instanceof int[])
return Arrays.toString((int[]) this);
if (this instanceof long[])
return Arrays.toString((long[]) this);
if (this instanceof float[])
return Arrays.toString((float[]) this);
if (this instanceof double[])
return Arrays.toString((double[]) this);
if (this instanceof Object[])
return Arrays.deepToString((Object[]) this);
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Diese modifizierte Klasse kann einfach zum Klassenpfad hinzugefügt werden, indem man folgendes in die Befehlszeile einträgt: -Xbootclasspath/p:target/classes
.
Jetzt, mit der Verfügbarkeit von deepToString(..)
seit Java 5 ist die toString(..)
kann leicht geändert werden in deepToString(..)
um Unterstützung für Arrays hinzuzufügen, die andere Arrays enthalten.
Ich fand dies einen sehr nützlichen Hack und es wäre toll, wenn Java dies einfach hinzufügen könnte. Ich verstehe mögliche Probleme mit sehr großen Arrays, da die String-Darstellungen problematisch sein könnten. Vielleicht sollte man etwas wie eine System.out
oder eine PrintWriter
für solche Eventualitäten.
9 Stimmen
Was soll die Darstellung für andere Objekte als Strings sein? Das Ergebnis des Aufrufs von toString? In Anführungszeichen oder nicht?
3 Stimmen
Ja, die Objekte werden durch ihre toString()-Methode und ohne Anführungszeichen dargestellt (die Beispielausgabe wurde gerade bearbeitet).
2 Stimmen
In der Praxis, eng verbunden mit stackoverflow.com/questions/29140402/
1 Stimmen
Diese merkwürdige Ausgabe ist nicht unbedingt der Speicherort. Es ist die
hashCode()
in hexadezimaler Form. SieheObject#toString()
.1 Stimmen
Um ein eindimensionales oder mehrdimensionales Array in Java8 zu drucken, prüfen Sie stackoverflow.com/questions/409784/
0 Stimmen
Verwandt: Konvertieren eines Arrays von Strings in einen String in Java & Wie kann ich mein Java-Objekt drucken, ohne "SomeType@2f92e0f4" zu erhalten?
0 Stimmen
Verwandt: stackoverflow.com/questions/62191507/