IntelliJを数年間使用した後、最近Eclipseを使い始めました。 IntelliJを使用してMapをデバッグするときに、キーまたはオブジェクトがtoString()を実装している場合、キー値の文字列表現の適切なリストが表示されます。
Eclipseで論理構造を表示を選択すると、次のように表示されます。
このビューの問題は、実際のキーと値を表示するために各エントリを展開する必要があることです。10を超える要素のマップで何かを見つける必要がある場合、非常に面倒になります。
カスタム論理構造とマップのデフォルトを次のように表示できることを理解しています。
return entrySet().toArray();
カスタム論理構造またはプラグインのいずれかを使用して、マップエントリを表示する方法はありますか?
ConcurrentHashMap$WriteThroughEntry (id=193)
デバッガーの「変数」ペインで値を選択すると、toString()メソッドを使用してその値が以下に表示されることがわかりました。これは、たとえばマップでうまく機能します。
論理構造の上に詳細フォーマッタを作成する必要があります。提供したスクリーンショットの例では、論理構造はConcurrentHashMap $ WriteThroughEntryです。 ConcurrentHashMap $ WriteThroughEntryを含む行を右クリックし、[詳細フォーマッターの追加]を選択すると、詳細フォーマッターを追加できます。
HashMapを使用してこの例をノックアップしました。
Java.util.HashMap$Entry // key + " - " + value
のために
HashMap<Integer,String> map;
..私はすぐにゴミを詰め込みました、私は今見ます:
さて、私は醜い回避策を作りました。マップ用にこの詳細フォーマッタを設定します。
StringBuilder detail = new StringBuilder();
int i = 0;
for (Object k : keySet()) {
detail.append((i++) + ": " + k + "\n");
}
return detail;
次に、その出力で、必要なキーを持つエントリのインデックスを見つけ、論理構造ツリーでそのエントリを見つけます。
動作しますが、ディテールフォーマッタ自体は少し遅く、追加の手順が必要です。また、キーはソートされていないため、大きなマップで必要なキーを見つけるのは難しい場合があります(ただし、理論的にはフォーマッターでソートを行うことができます)。
値を読みやすくするには、[式]ウィンドウの下にある[論理構造を表示]を使用するだけです。これをチェックしてください https://blog.codecentric.de/en/2013/04/again-10-tips-on-Java-debugging-with-Eclipse/