在 IntelliJ IDEA 中调试 Java 期间生成的变量名称中的美元符号是啥意思?是闭包吗?

Posted

技术标签:

【中文标题】在 IntelliJ IDEA 中调试 Java 期间生成的变量名称中的美元符号是啥意思?是闭包吗?【英文标题】:What does dollar sign mean in generated variable names during debugging Java in InteliJ IDEA ? Is it a closure?在 IntelliJ IDEA 中调试 Java 期间生成的变量名称中的美元符号是什么意思?是闭包吗? 【发布时间】:2015-02-11 01:46:02 【问题描述】:

在 InteliJ 中调试 Java 期间,变量名中的美元符号是什么意思?是闭包吗?请看下面的图片和代码sn-p。

这是 Stream 类的一部分:

public final Listener listen(final Handler<A> action) 
    return listen_(Node.NULL, new TransactionHandler<A>() 
        public void run(Transaction trans2, A a) 
            action.run(a);
        
    );

我怀疑Stream$1@915 中的$1 指的是上面方法中创建的闭包。不过我不确定。有人可以证实这一点吗?或者,如果不是这种情况,请解释生成的名称中美元符号的含义?

code 取自 Sodium Functional Reactive 库,我正在尝试了解它的工作原理。

【问题讨论】:

java compiled classes contain dollar signs 的可能副本,也可能是 What is the meaning of $ in a variable name?。 谢谢!我在 SOF 上搜索了答案,但一无所获,可能是我搜索的关键字错误。 【参考方案1】:

它是一个匿名内部类的引用,它是由这个闭包结构生成的。一般来说,编译内部类,类文件名将是yourClassName$yourInnerClassName。在匿名内部类声明的情况下,由于您没有明确命名它,它将显示为使用数字生成的名称。也许这个article 会有所帮助?

【讨论】:

感谢您的解释。

以上是关于在 IntelliJ IDEA 中调试 Java 期间生成的变量名称中的美元符号是啥意思?是闭包吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 10 上使用 Intellij IDEA 在 WSL 2 中运行和调试 Java

IDEA Intellij 如何调试从 Java 类调用的 PL/SQL 代码

IntelliJ IDEA中如何优雅的调试Java Stream操作

IntelliJ IDEA中如何优雅的调试Java Stream操作

IntelliJ IDEA中如何优雅的调试Java Stream操作

IntelliJ IDEA中如何优雅的调试Java Stream操作