首页 > 解决方案 > Eclipse 调用层次结构 lambda

问题描述

我认为自从 Lambda 发布 Java 以来已经过去了 5 年。

public static void main(String[] args) {
    go();
}

private static void go() {
    Set<String> set = new HashSet<>();
    set.stream().forEach((s) -> {
        inner(s);
    });
}

private static void inner(String s) {
    inner1(s);
}

private static void inner1(String s) {

}

当我在方法上按 CTRL-ALT-H - (打开调用层次结构)时inner1,我希望看到从 ininner1main方法的整个堆栈跟踪。相反,我的 staktrace 是在inner方法上修剪的。我刚刚下载了最新的 Eclipse,我认为它是 2018-12,之前我使用的是 Mars。

在此处输入图像描述 Intellij 可以向我展示预期的调用层次结构,我真的不明白为什么 Eclipse 仍然无法做到这一点。不确定是否有人在 2019 年使用 Eclipse,但也许您可以建议一个插件或其他东西。

切换到 Intellij 不是一种选择,我尝试了几次,但这种习惯很难克服。

更新

有类似的-所以问题

在运行时,lambda 表达式的求值类似于类实例创建表达式的求值,只要正常完成产生对对象的引用。lambda 表达式的求值不同于 lambda 主体的执行。

请注意,对于实现像 Consumer 这样的库类型的 lambdas,工作区中接受 (T) 的调用者数量可能很容易变得难以管理,类似于通过 Runnable.run() 进行的任何调用层次结构——但这没有问题通过 lambda 调用层次结构的一般用途。

我并不真正关心 lambda 内部,不知何故其他 IDE 能够显示预期的堆栈跟踪

标签: eclipsejava-8java-stream

解决方案


2016 年报告的 Eclipse存在一个现有的旧错误,仍处于 NEW 状态

错误 498498 - [1.8][search][call hierarchy] 没有使用 lambdas

bar 方法上的调用层次结构正确显示了接受中的用法,而接受没有显示用法。这个问题已经出现在火星上。

有 3 票可以修复它,你也可以投票

从您的编辑链接中,有另一个相关的旧错误处于新状态

错误 468561 - [搜索]调用层次结构停止在双重嵌套的 lambda 链中搜索

也有3票...


推荐阅读