我最近在使用IntelliJ几年后开始使用Eclipse。使用IntelliJ调试Map时,如果键或对象实现toString(),则会显示一个很好的键值表示字符串表示。
在Eclipse中,当我选择显示逻辑结构时,我会看到以下内容:
此视图的问题是您需要展开每个条目才能查看实际的键和值。如果您需要在超过10个元素的地图中找到某些内容,则会变得非常繁琐。
据我所知,您可以制作自定义逻辑结构,而Map的默认设置如下:
return entrySet().toArray();
有没有办法,通过自定义逻辑结构或插件来查看比
更有用的地图条目ConcurrentHashMap$WriteThroughEntry (id=193)
答案 0 :(得分:55)
您需要在逻辑结构之上创建详细格式化程序。在您提供的示例屏幕截图中,您的逻辑结构是ConcurrentHashMap $ WriteThroughEntry。您可以通过右键单击包含ConcurrentHashMap $ WriteThroughEntry的行并选择“添加详细格式化程序”来添加详细格式化程序。
我刚刚使用HashMap敲了这个例子。
java.util.HashMap$Entry // key + " - " + value
对于
HashMap<Integer,String> map;
..我很快就填满了垃圾,我现在看到了:
答案 1 :(得分:8)
我做了一个丑陋的解决方法。为Map:
设置此详细格式化程序StringBuilder detail = new StringBuilder();
int i = 0;
for (Object k : keySet()) {
detail.append((i++) + ": " + k + "\n");
}
return detail;
然后在输出中,找到所需键的条目索引,然后在逻辑结构树中找到该条目。
它有效,但细节格式化程序本身有点慢,需要额外的步骤。此外,键没有排序,因此在大型地图中找到所需的键可能很困难(理论上可以在格式化程序中进行排序)。
答案 2 :(得分:7)
我发现当我在调试器的“变量”窗格中选择一个值时,使用toString()方法显示其值。例如,这适用于地图。
答案 3 :(得分:2)
只需使用表达式窗口下的“显示逻辑结构”即可使值更具可读性。看一下这个 https://blog.codecentric.de/en/2013/04/again-10-tips-on-java-debugging-with-eclipse/