如何解决为什么在这种情况下会生成classname $ 1.class?
类TestHolder
需要在中调用私有构造函数Test
。但是它是私有的,实际上不能从另一个类中调用。因此,编译器发挥了作用。它添加了一个Test
仅知道的新的非私有构造函数!_该构造函数采用此匿名类的(未使用的)实例Test$1
-没人知道它的存在。然后TestHolder
创建的实例Test$1
并调用
_该 构造函数,该构造函数是可访问的(默认保护)。
您可以使用javap -c Test
(和javap -c Test\$1
,和javap -c
Test\$TestHolder
)查看代码。实际上,它非常聪明!
解决方法
我编写了以下代码来实现Singleton模式:
public final class Test {
static final class TestHolder {
private static final Test INSTANCE = new Test();
}
private Test() {}
public static Test getInstance() {
return TestHolder.INSTANCE;
}
}
当我编译此文件时,它应该生成Test.class和Test $ TestHolder.class,但它还会生成Test $
1.class。这没有道理。那么,为什么以及如何呢?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。