java - 使用诸如 ".lambda$null$2"& 和 "$$Lambda$"之类的 lambda 解释 Java 堆栈跟踪

标签 java exception logging lambda stack-trace

我正在寻找 Java 8 堆栈跟踪中出现在 lambda 周围的部分的定义

例如这段代码

Object inputData = someData();

myList.stream().forEach(listItem -> {

    Query query = (Query) listItem.getSingle().apply(this.getId());

    Object data = diffUtils.applyProjection(query, inputData);

    myStringCollection.stream()
       .filter(destination -> myPredicateMethod(listItem, destination))
       .forEach(destination -> myProcessMethod(destination, data));
}

有时会产生这个异常。

at [CLASS].lambda$null$2([CLASS].java:85)
at [CLASS]$$Lambda$64/730559617.accept(Unknown Source)

异常中描述的不同部分是什么? “null”、“2”、“64”、“730559617”和“Unknown Source”告诉我什么?

可以在此处找到更详细的示例(但此处不存在上述异常中的“null”)。 http://blog.takipi.com/the-dark-side-of-lambda-expressions-in-java-8/

最佳答案

这个生成的类名没有标准定义。这是为了避免您编写依赖于它的代码,使设计人员以后更难更改它。

话虽这么说,你能读到的是什么;

  • 类名的第一部分是调用站点的类。
  • 最后一个$ 之前的数字是lambda 的全局计数器。这取决于生成 lambda 代码的顺序。
  • 大数字是生成的 ID。每次运行时相同的 lambda 都是不同的,但一旦开始就不会改变。

“未知来源”告诉您生成的代码没有与之关联的调试信息。

我们正在研究一个用于更改 lambda 的 toString 的库,以便您了解与之关联的代码。也就是说,至少对于微不足道的情况,它看起来像 lambda 的代码。

关于java - 使用诸如 ".lambda$null$2"& 和 "$$Lambda$"之类的 lambda 解释 Java 堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31683006/

相关文章:

android - 反序列化时出现 Gson 异常(无参数构造函数不存在)

java - 使用大量连接时 Kinesis 出现错误

java - 来自供应商库的垃圾泛滥 log4j

java - 桌面应用程序的对象持久化策略

java - 从列表构建链接链

java - Springs XmlBeanFactory 已弃用

tensorflow - 通过 docker 详细登录 tensorflow 服务

java - 远程安装 Tomcat(在 digital ocean 服务器上?)

mysql - 数据库未连接。它可以和什么联系起来?

javascript - 如何将 bunyan 日志记录函数绑定(bind)到 ES6 中的类函数?