微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

IntelliJ Java 类型渲染器,用于带有原语的 Eclipse 集合

如何解决IntelliJ Java 类型渲染器,用于带有原语的 Eclipse 集合

我发现 Eclipse Collections 非常有用。特别是原始类型的集合(例如:IntObjectHashMap)。 不幸的是,在 IntelliJ IDEA 调试器中呈现这些集合时存在问题。

让我们有一个示例代码

import org.eclipse.collections.impl.map.mutable.primitive.IntObjectHashMap;
import java.util.HashMap;

public class Test {
    public static void main(String[] args) {
        IntObjectHashMap<String> eclipseMap = new IntObjectHashMap<>(4);
        eclipseMap.put(1,"one");
        eclipseMap.put(2,"two");

        HashMap<Integer,String> hashMap = new HashMap<>(4);
        hashMap.put(1,"one");
        hashMap.put(2,"two");

        System.out.println("" + eclipseMap);
        System.out.println("" + hashMap);
    }
}

这里有一个调试器变量视图:

enter image description here

正如我们所见,JDK HashMap 呈现完美,但 IntObjectHashMap Eclipse Collection 不是。

当我为 Eclipse Collection 下拉值时,情况更糟:

enter image description here

正如我们所见 - 值列表中没有 one 元素。

您可以说:好的,作为一种解决方法,您可以使用 IntelliJ 中提供的标准 toString 渲染器:

enter image description here

不幸的是,我的情况并非如此,因为我的集合有数千万个元素。

所以我的问题是:

有人知道我可以在哪个地方/一个项目中找到用于原始类型的 Eclipse Collections 的 IntelliJ Java 类型渲染器吗?

解决方法

你可以创建一个类型渲染器,例如这样: enter image description here

,

@Egor 的回答几乎是完美的 :) 效果很好,但仅适用于小型收藏。

让我用@Egor 解决方案来描述问题。我们来看一个例子:

import org.eclipse.collections.impl.map.mutable.primitive.IntObjectHashMap;

public class Test3 {
    public static void main(String[] args) {
        final int CAPACITY = 20_000_000;
        IntObjectHashMap<String> eclipseMap = new IntObjectHashMap<>();
        for (int i = 0; i < CAPACITY; i++) {
            eclipseMap.put(i,Integer.toString(i));
        }

        System.out.println("Hello world.");
    }
}

现在运行它 - 一切正常。 现在将断点放在第 System.out.println("Hello world.") 行并在调试模式下执行该程序。

我们会被 OutOfMemoryError 打耳光(因为 IntelliJ 在这个集合上调用了 toString 方法):

enter image description here

要解决这个问题,我们需要设置 When rendering a node -> Use following expression - 例如这样:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。