gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:22:23 32 4
gpt4 key购买 nike

我正在寻找 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com