java 编译类包含美元符号

2022-08-31 10:55:38

我一直在使用Eclipse作为我的IDE。我还使用它将我的应用程序导出到 JAR 文件中。当我在 JAR 文件中查看我的类时,我的一些类包含该类的名称,一个美元符号,然后是一个数字。例如:

Find$1.class 
Find$2.class
Find$3.class
Find.class

我注意到它在更大的类上这样做。这是因为类变得如此之大,以至于将其编译为多个类吗?我已经谷歌搜索并查看了多个论坛,并搜索了Java文档,但甚至没有找到任何与之相关的内容。有人可以解释吗?


答案 1

将编译内部类(如果类中存在任何类),并且类文件将为 。对于匿名内部类,它将显示为数字。类的大小(Java 代码)不会导致生成多个类。ClassName$InnerClassName

例如,给定这段代码:

public class TestInnerOuterClass {
    class TestInnerChild{

    }

    Serializable annoymousTest = new Serializable() {
    };
}

将生成的类将是:

  1. TestInnerOuterClass.class
  2. TestInnerOuterClass$TestInnerChild.class
  3. TestInnerOuterCasss$1.class

更新:

使用匿名类不被认为是一个不好的做法,它只是取决于用法。

查看有关 SO 的讨论


答案 2

这是因为您在这个较大的类中有匿名类。它们是使用此命名约定编译的。

参见匿名类难题