2012-06-14 9 views
7

Questa è la mia prima domanda su Stackoverflow, quindi ti prego di sopportarmi se trovi qualcosa di insensato nel mio primo post. Cordiali saluti che ho passato attraverso le FAQ SO e sono a conoscenza delle sue varie politiche. Vedete, sono un ragazzo che ha lavorato intensamente con linguaggi come PHP, Perl, Python, ROR e recentemente I "context-switched" su Java EE. Vedete, molte delle lingue che ho lavorato aveva un costrutto che mi ha permesso di scaricare ricorsivamente il contenuto di una struttura aggregata senza per/foreach/ciclo for..inDump ricorsivo in modo ricorsivo dei contenuti di una struttura aggregata (Collection, Array) in Java

Per esempio,

a = Any composite Data structure

PHP ha

var_dump() and print_r()

Perl ha

Data::Dumper

ROR ha

PrettyPrint

e Python ha

pprint module
.

Quindi la mia domanda va,

Esiste un equivalente di uno qualsiasi di questi nell'universo Java? Trovo molto utile quando lavoravo in uno di questi linguaggi (PHP/Perl/Python/ROR) per scaricare il contenuto di una struttura dati composita per esaminare come appare e quindi elaborarlo ulteriormente (o decidere come elaborare ulteriormente)

Grazie per il vostro tempo e scuse se il mio post si affaccia su alcune regole SO.

+2

1) Benvenuti in SO. 2) Per quanto riguarda la tua etichetta di SO, l'unica cosa che hai fatto di sbagliato è stato parlare tanto di essere nuovo di SO. Sii diretto e al punto con la tua domanda: quando qualcun altro cerca lo stesso argomento, non gli importa della tua storia di vita. :-) –

+0

Ok, Greg. Grazie :) –

risposta

1

Le java.util collezioni hanno toString() che ricorsivamente scaricare i dettagli della/set/carta ecc Questo richiede che il gli oggetti memorizzati nella raccolta hanno utili toString() s definiti.

Si rompe per gli array, tuttavia, poiché Java non ha un valore utile predefinito toString() per un array. Se sai che hai a che fare con un array, puoi utilizzare il metodo di utilità Arrays.deepToString() (vedi guido's response per maggiori dettagli).

Ad esempio, questo codice:

final Map<String, Object> map = new HashMap<String, Object>(); 
final List<String> nested = Arrays.asList("foo", "bar", "baz"); 

map.put("given", "Arthur"); 
map.put("family", "Dent"); 
map.put("nested", nested); 

System.out.println(map); 

Produce il seguente:

{nested=[foo, bar, baz], given=Arthur, family=Dent} 
+0

Ok, questo riassume la tua risposta e quella sopra. Non sono sicuro di quale debba essere il green-check :) Grazie mille per aver risposto. –

0

È possibile utilizzare i metodi statici di utilità si trovano in java.util.Arrays classe:

public static String toString(Object[] a) 
ie: String dump = Arrays.toString(array); 

Restituisce una stringa che rappresenta il contenuto della matrice specificata.

Se la matrice contiene altri array come elementi, vengono convertiti in stringhe dal metodo Object.toString() ereditato da Object, che descrive le loro identità piuttosto che il loro contenuto.

Il valore restituito da questo metodo è uguale al valore che verrebbe restituito da Arrays.asList (a) .toString(), a meno che a sia null, nel qual caso viene restituito "null".

public static String deepToString(Object[] a) 
ie: String dump = Arrays.deepToString(array); 

Restituisce una rappresentazione di stringa del "contenuto profondo" dell'array specificato. Se la matrice contiene altri array come elementi, la rappresentazione della stringa contiene i loro contenuti e così via. Questo metodo è progettato per convertire array multidimensionali in stringhe.

La rappresentazione della stringa consiste in un elenco di elementi della matrice, racchiusi tra parentesi quadre ("[]"). Gli elementi adiacenti sono separati dai caratteri "," (una virgola seguita da uno spazio). Gli elementi vengono convertiti in stringhe come da String.valueOf (Object), a meno che non siano essi stessi matrici.

In caso di colletions, è possibile utilizzare il metodo toArray():

List<YourObject> list = ..... 
YourObject[] array = list.toArray(new YourObject[0]); 
String dump = Arrays.deepToString(array); 
+0

Grazie! ha funzionato un fascino. –

0

A seconda del vostro scopo, che presumo di debug del codice o esplorare una struttura dati complessa, non vengono stampati.

Utilizzare un buon debugger UI come quello in IntelliJ o (shudder, per favore non farlo) eclipse. Java ha un set di strumenti molto più maturo e completo disponibile per gli sviluppatori rispetto alle altre lingue che hai elencato (ho anche lavorato nella maggior parte di quelle). Php, Perl, ecc sono primitivi e per qualche motivo le persone continuano a svilupparsi in un semplice editor di testo. Java non funziona in questo modo (almeno non se vuoi rimanere sano di mente o stai lavorando su qualcosa di più grande di un progetto giocattolo).

Utilizzare un IDE completo ed è integrato nel debugger.

Negli altri che hai elencato non c'è un'opzione molto buona per un IDE e l'integrazione di debug è pessima al massimo ... Questo è uno dei maggiori vantaggi per Java in effetti.

Problemi correlati