2011-09-01 9 views
17

Recentemente ho iniziato a utilizzare Eclipse dopo aver utilizzato IntelliJ per alcuni anni. Quando esegui il debug di Map utilizzando IntelliJ, se la chiave o l'oggetto implementa toString(), viene visualizzato un elenco di rappresentazione di stringa di valore-chiave.Eclipse debugging HashMap: Struttura logica utilizzando il metodo toString() di Key and Value

In Eclipse, quando seleziono Mostra struttura logica, vedo qualcosa di simile al seguente:

enter image description here

Il problema con questo punto di vista è che sarà necessario espandere ogni voce di vedere il chiave e valore effettivi. Se hai bisogno di trovare qualcosa in una mappa di oltre 10 elementi, diventa molto noioso.

ho capito che si può fare struttura logica personalizzata e il valore predefinito per Mappa guardare da questo:

return entrySet().toArray(); 

non v'è alcun modo, sia attraverso struttura logica personalizzata o plug per visualizzare Map Entries più utile di

ConcurrentHashMap$WriteThroughEntry (id=193) 

risposta

6

trovo che quando si seleziona un valore nel riquadro "Variabili" nel debugger, il suo valore è mostrato di seguito USI ng il metodo toString(). Questo funziona bene per le mappe, per esempio.

+0

Grazie, sono consapevole di poter espandere ogni MapEntry per vedere la chiave e il valore.Tuttavia, questo è molto noioso se si desidera individuare una voce in una mappa di qualsiasi dimensione ragionevole. – ltfishie

+0

Puoi per favore rimuovere la tua risposta dal momento che non affronta la mia domanda? – ltfishie

+0

Mi dispiace, ma non penso che tu abbia capito la mia risposta. Se si seleziona semplicemente (ovvero si fa clic su di esso, rendendolo evidenziato), il valore che si desidera controllare, il suo toString() viene mostrato in un riquadro vicino, senza necessità di espansione. –

8

Beh, ho fatto una brutta soluzione. Impostare questo dettaglio formattatore per Map:

StringBuilder detail = new StringBuilder(); 
int i = 0; 
for (Object k : keySet()) { 
    detail.append((i++) + ": " + k + "\n"); 
} 
return detail; 

Poi nella produzione di che, trovare l'indice della voce con la chiave che si desidera, poi trovare che l'ingresso nella struttura ad albero logica.

Funziona, ma il formattatore di dettagli in sé è un po 'lento e richiede un ulteriore passaggio. Anche i tasti non sono ordinati in modo da trovare la chiave che si desidera in una mappa di grandi dimensioni può essere difficile (anche se l'ordinamento potrebbe teoricamente essere fatto nel formattatore).

+1

Grazie. Funziona bene. +1 –

49

È necessario creare un formattatore di dettagli in cima alla struttura logica. Nello screenshot di esempio che hai fornito, la tua struttura logica è ConcurrentHashMap $ WriteThroughEntry. È possibile aggiungere il formattatore di dettagli facendo clic con il tasto destro su una riga contenente un ConcurrentHashMap $ WriteThroughEntry e selezionando "aggiungi formattatore di dettagli".

Ho appena eliminato questo esempio utilizzando HashMap.

enter image description here

java.util.HashMap$Entry // key + " - " + value 

Per un

HashMap<Integer,String> map; 

.. ho subito popolata con i rifiuti, ora vedo:

enter image description here

+2

È interessante notare che questo non funziona su OS X in Eclipse 3.7, penso a causa della JVM di Apple. Ottengo un errore quando provo a definire un formattatore di dettagli per una classe interna. Ma questo è come farlo. Notare che è possibile minimizzare le modifiche alla vista delle variabili selezionando il primo pulsante di opzione. – sharakan

+1

Si prega di rendere lo screenshot della vista "Variabili" un po 'più grande e circondare il pulsante "Mostra struttura logica". –

+0

Anche se non è perfetto (le chiavi non sono ordinate), questo funziona abbastanza bene, quindi ecco la taglia. –

Problemi correlati