2011-09-01 15 views
17

私は最近IntelliJを数年間使用してEclipseを使い始めました。 IntelliJを使用してMapをデバッグするとき、キーまたはオブジェクトがtoString()を実装すると、key-valueの文字列表現の素敵なリストが表示されます。 EclipseでEclipseのデバッグHashMap:キーと値のtoString()メソッドを使用した論理構造

、私はショー論理構造を選択したときに、私は次のようなものを参照してください。

enter image description here

このビューでの問題は、あなたが見るために各エントリを展開する必要があるということです実際のキーと値。 10以上の要素の地図で何かを見つける必要がある場合は、非常に面倒です。私はあなたがカスタム論理構造や地図のデフォルトは、この見えるようにすることができることを理解し

return entrySet().toArray(); 

は、いずれかのマップエントリを表示するには、カスタム論理構造またはプラグインを通じてどのような方法があるが、私は、デバッガの「変数」ペインで値を選択すると、その値はUSIの下に表示されていることを見つける

ConcurrentHashMap$WriteThroughEntry (id=193) 

答えて

6

よりも便利toString()メソッドを使用します。これは、マップなどでうまく動作します。

+0

ありがとう、私は各MapEntryをキーと値を表示するように拡張できます。しかし、合理的なサイズのマップにエントリを配置する場合は、これは非常に面倒です。 – ltfishie

+0

私の質問には答えられないので、あなたの答えを削除してもよろしいですか? – ltfishie

+0

申し訳ありませんが、私はあなたが私の答えを理解したとは思わない。検査する値を選択するだけで(つまり、強調表示させる)、そのtoString()が近くのパネルに表示されます。展開する必要はありません。 –

8

私は醜い回避策をとった。地図のために、この詳細フォーマッタを設定します。

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

が続いているの出力には、必要なキーを持つエントリのインデックスを見つけ、その後、論理構造ツリー内でそのエントリを見つけます。

ディテールフォーマッタ自体は少し遅く、余分なステップが必要です。また、キーはソートされていないので、大きなマップで必要なキーを見つけるのは難しいかもしれません(ソートは理論的にはフォーマッターで行うことができます)。

+1

ありがとうございます。正常に動作します。 +1 –

49

論理構造の上に詳細フォーマッタを作成する必要があります。指定したスクリーンショットの例では、論理構造はConcurrentHashMap $ WriteThroughEntryです。 ConcurrentHashMap $ WriteThroughEntryを含む行を右クリックし、「詳細フォーマッタを追加」を選択すると、詳細フォーマッタを追加できます。

私はHashMapを使用してこの例をノックアップしました。

HashMap<Integer,String> map; 

については

enter image description here

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

..私はすぐにゴミで埋め、私は今、次を参照してください。

enter image description here

+2

興味深いことに、これはeclipse 3.7のOS Xでは動作しません。私はAppleのJVMのためだと思います。内部クラスのディテールフォーマッタを定義しようとするとエラーが発生します。しかし、これはそれを行う方法です。最初のラジオボタンを選択すると、変数ビューの変更を最小限に抑えることができます。 – sharakan

+1

「変数」ビューのスクリーンショットを少し大きめにして、「論理構造を表示」ボタンを囲んでください。 –

+0

これは完璧ではありませんが(キーはソートされていません)、十分に機能しますので、ここで賞金があります。 –