引用这个问题-
How does `this` reference to an outer class escape through publishing inner class instance?
如果我们用 lambda 或方法引用替换匿名类,这段代码为什么以及如何表现?
public class ThisEscape {
public ThisEscape(EventSource source) {
source.registerListener(e -> doSomething(e));
}
}
最佳答案
从技术上讲,创建匿名内部类或使用 lambda 并没有太大区别。 Lambda 不仅仅是语法糖果,它使 Java 一直能够做的事情更加突出、易于访问和不易出错。那就是您的代码受制于 the question you referred to 中描述的相同竞争条件。及其答案。
使用给定的代码构造,您无法保证在调用 doSomething
之前正确创建了 ThisEscape
的实例。
阅读 this answer 中链接的 javaspecialists.eu 时事通讯了解在什么情况下可能会出现问题。
关于java - 在构造函数中使用 lambda 时的“this”引用转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62625880/