2011-09-01 7 views
17

Niedawno zacząłem używać Eclipse po użyciu IntelliJ od kilku lat. Podczas debugowania mapy przy użyciu IntelliJ, jeśli klucz lub obiekt implementuje toString(), wyświetlana jest ładna lista reprezentacji łańcuchowej pary klucz-wartość.Debugowanie Eclipse HashMap: Struktura logiczna za pomocą metody ToString() klucza i wartości

W Eclipse, kiedy wybrać Pokaż struktura logiczna, widzę coś jak następuje:

enter image description here

Problem z tego punktu widzenia jest to, że trzeba będzie poszerzyć każdy wpis, aby zobaczyć rzeczywisty klucz i wartość. Jeśli chcesz znaleźć coś na mapie składającej się z ponad 10 elementów, staje się to bardzo uciążliwe.

Rozumiem, że można zrobić zwyczaj logiczna struktura i domyślne mapy wyglądają następująco:

return entrySet().toArray(); 

Czy jest jakiś sposób, albo poprzez zwyczaj Logical Structure lub wtyczki do widoku mapy Wpisy bardziej przydatne niż

ConcurrentHashMap$WriteThroughEntry (id=193) 

Odpowiedz

6

Uważam, że kiedy wybrać wartość w okienku „zmiennych” w debugger, jego wartość jest poniżej USI w metodzie toString(). Działa to na przykład w przypadku map.

+0

Dziękuję, wiem, że mogę rozszerzyć każdy MapEntry, aby zobaczyć klucz i wartość.Jest to jednak bardzo uciążliwe, jeśli chcesz znaleźć wpis na mapie o rozsądnym rozmiarze. – ltfishie

+0

Czy możesz usunąć odpowiedź, ponieważ nie zawiera ona mojego pytania? – ltfishie

+0

Przykro mi, ale nie sądzę, że zrozumiałeś moją odpowiedź. Jeśli po prostu wybierzesz (tzn. Klikniesz, podświetlając), wartość, którą chcesz sprawdzić, to toString() jest pokazane w pobliskim panelu - bez konieczności rozwijania. –

8

Cóż, zrobiłem brzydkie obejście. Skonfigurować ten szczegół formatowania na mapie:

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

Wtedy na wyjściu, że znalezienie indeks klawiszem chcesz, to okaże się, że wpis w logicznej strukturze drzewa.

Działa, ale sam formatator szczegółów jest nieco powolny i wymaga dodatkowego kroku. Również klawisze nie są posortowane, więc znalezienie odpowiedniego klawisza na dużej mapie może być trudne (chociaż sortowanie może być teoretycznie wykonane w formatyzatorze).

+1

Dzięki. Działa w porządku. +1 –

49

Musisz utworzyć formater do szczegółów na szczycie struktury logicznej. Na przykładowym zrzucie ekranu Twoja struktura logiczna to ConcurrentHashMap $ WriteThroughEntry. Możesz dodać formatator szczegółów, klikając prawym przyciskiem myszy wiersz zawierający ConcurrentHashMap $ WriteThroughEntry i wybierając opcję "dodaj formatera szczegółów".

Właśnie zapukałem ten przykład używając HashMap.

enter image description here

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

Dla

HashMap<Integer,String> map; 

.. I szybko wypełniona śmieciami, teraz widzę:

enter image description here

+2

Co ciekawe, to nie działa na OS X w Eclipse 3.7, myślę, że z powodu JVM Apple. Wystąpił błąd podczas próby zdefiniowania formantu szczegółów dla wewnętrznej klasy. Ale tak to zrobić. Zauważ, że możesz zminimalizować zmiany w widoku zmiennych, wybierając pierwszy przycisk opcji. – sharakan

+1

Proszę zrobić zrzut ekranu widoku "Zmienne" nieco większy i zamknąć przycisk "Pokaż strukturę logiczną". –

+0

Mimo że nie jest doskonały (klawisze nie są posortowane), działa to wystarczająco dobrze, więc tutaj jest nagroda. –

Powiązane problemy