【问题标题】:How to debug lambda expression in Java 8 using Eclipse?如何使用 Eclipse 在 Java 8 中调试 lambda 表达式?
【发布时间】:2016-09-22 10:59:54
【问题描述】:

我正在尝试调试一个使用 Lambda 表达式的简单 Java 应用程序。我无法使用普通的 Eclipse 调试器调试 Lambda 表达式。

【问题讨论】:

  • 换行和分步调试基于行号。因此,您可能必须在 lambda 表达式中插入换行符才能将其与其周围的上下文分开。除此之外,它可以毫无问题地工作,即使 Eclipse 版本不知道 lambda 表达式(这都是关于将行号与源代码文本匹配)。
  • 恕我直言,如果需要调试,它不应该是 lambda 而是私有方法...
  • 还要在您的信息流中考虑peek(System.out::println)
  • 转回匿名内部类。
  • @Serge Ballesta:有时,你想设置一个断点来确定它是否以及何时被评估和/或检查调用者提供的参数。这与 lambda 的复杂性无关。

标签: eclipse debugging lambda java-8


【解决方案1】:

这是迟到的答案,但希望它对某人有用。 我使用这个https://stackoverflow.com/a/24542150/10605477,但有时当代码有点乱或我无法获取数据时,我只是破坏代码并插入 peek。

protected Optional<Name> get(String username) {
    return profileDao.getProfiles()             
            .stream()
            .filter(profile -> 
                    profile.getUserName().equals(username))
            .peek(data -> System.out.println(data))
            .findFirst();
}

【讨论】:

    【解决方案2】:

    您可以将表达式转换为语句。

    List<String> list = new ArrayList<>();
    
    // expression
    boolean allMatch1 = list.stream().allMatch(s -> s.contains("Hello"));
    // statement
    boolean allMatch2 = list.stream().allMatch(s -> {
      return s.contains("Hello");
    });
    

    您现在可以在return s.contains("Hello"); 行设置断点

    【讨论】:

    • 不需要将表达式转换为语句。只需在-&gt; 之后插入换行符就足够了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 2015-04-17
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多