[英]Java: multiple inner classes generated from Singleton Holder pattern
我有一个非常简单的单例,它使用了holder模式(我只显示了模式,没有显示其他细节):
public class Foo
{
private static class FooHolder
{
private static final Foo INSTANCE = new Foo();
}
public static Foo getInstance()
{
return FooHolder.INSTANCE;
}
}
当我通过Eclipse 1.6 compiler
编译此类时,它将生成两个类: Foo.class
和Foo$FooHolder.class
。 但是,当我通过Maven
和JDK 1.6 compiler
对其进行JDK 1.6 compiler
,它将生成一个附加类: Foo$1.class
,该类几乎是空的。
我试图理解为什么会这样。 由于限制,我无法提供有关代码的更多详细信息。
尽管Java允许访问同一.java
中其他类的私有成员,但JVM不支持此功能。
相反,编译器生成的代码将通过生成的访问器方法(例如access $ 010()或生成的子类)对这些成员进行秘密访问。 每个编译器的确切实现方式是实现细节。
我很确定Oracle JDK 7不会这样做。
顺便说一句,使用枚举代替世界更简单,创建更少的类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.