之所以会发生名称冲突,是因为您定义的顶级类A $ B与类A的静态内部类B的生成名称具有相同的名称。由于两者都存在,因此编译器无法解决冲突。
JLS说:
$字符仅应在机械生成的源代码中使用,或很少用于访问旧系统上的现有名称。
由于您决定不遵守该规则,因此被javac所咬。我只是将A $ B重命名为其他名称。

之所以会发生名称冲突,是因为您定义的顶级类A $ B与类A的静态内部类B的生成名称具有相同的名称。由于两者都存在,因此编译器无法解决冲突。
JLS说:
$字符仅应在机械生成的源代码中使用,或很少用于访问旧系统上的现有名称。
由于您决定不遵守该规则,因此被javac所咬。我只是将A $ B重命名为其他名称。