2011-09-01 5 views
17

Recientemente comencé a usar Eclipse después de usar IntelliJ durante algunos años. Al depurar Map utilizando IntelliJ, si la clave u objeto implementa toString(), se muestra una buena lista de representación de cadena de clave-valor.Eliminación de errores de Eclipse HashMap: Estructura lógica utilizando el método ToString() de Key y Value()

En Eclipse, cuando selecciono Mostrar estructura lógica, veo algo como lo siguiente:

enter image description here

El problema con este punto de vista es que se necesita para expandir cada entrada para ver la clave y valor real Si necesita encontrar algo en un mapa de más de 10 elementos, se vuelve muy tedioso.

entiendo que usted puede hacer Estructura personalizada lógico y el valor por defecto para el Mapa mirar el siguiente:

return entrySet().toArray(); 

¿Hay alguna forma, ya sea a través Estructura personalizada lógico o complemento para ver Entradas de mapa más útil que

ConcurrentHashMap$WriteThroughEntry (id=193) 

Respuesta

6

me parece que cuando selecciono un valor en el panel "Variables" en el depurador, se muestra su valor por debajo USI ng el método toString() Esto funciona muy bien para mapas, por ejemplo.

+0

Gracias, soy consciente de que puedo expandir cada MapEntry para ver la clave y el valor.Sin embargo, esto es muy tedioso si desea ubicar una entrada en un mapa de cualquier tamaño razonable. – ltfishie

+0

¿Puede eliminar su respuesta ya que no atiende mi pregunta? – ltfishie

+0

Lo siento, pero no creo que haya entendido mi respuesta. Si simplemente selecciona (es decir, hace clic en él y lo resalta), el valor que desea inspeccionar, su orden toString() se muestra en un panel cercano; no es necesario expandirlo. –

8

Bueno, hice una solución fea. Establecer este detalle formateador de Mapa:

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

Luego, en la salida de ese, busque el índice de la entrada con la tecla que desea, y luego encontrar que la entrada en el árbol de estructura lógica.

Funciona, pero el formateador de detalles en sí mismo es un poco lento y requiere un paso adicional. Además, las teclas no están ordenadas, por lo que encontrar la clave que desea en un mapa grande puede ser difícil (aunque la clasificación podría hacerse teóricamente en el formateador).

+1

Gracias. Funciona bien. +1 –

49

Necesita crear un formateador de detalles sobre la estructura lógica. En la captura de pantalla de ejemplo que proporcionó, su estructura lógica es ConcurrentHashMap $ WriteThroughEntry. Puede agregar el formateador de detalles haciendo clic con el botón derecho en una fila que contiene un ConcurrentHashMap $ WriteThroughEntry y seleccionando 'agregar formateador de detalles'.

Acabo de noquear este ejemplo usando HashMap.

enter image description here

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

Para una

HashMap<Integer,String> map; 

.. Me rápidamente pobladas con basura, ahora veo:

enter image description here

+2

Curiosamente, esto no funciona en OS X en eclipse 3.7, creo que debido a la JVM de Apple. Me sale un error cuando trato de definir un formateador de detalles para una clase interna. Pero esta es la forma de hacerlo. Tenga en cuenta que puede minimizar los cambios en la vista de variables seleccionando el primer botón de opción. – sharakan

+1

Haga que la captura de pantalla de la vista "Variables" sea un poco más grande y rodee el botón "Mostrar estructura lógica". –

+0

Aunque no es perfecto (las teclas no están clasificadas), esto funciona bastante bien, así que aquí está la recompensa. –

Cuestiones relacionadas