我有一个非常简单的单身人士使用持有人模式(我只展示了模式,而不是其他细节):
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
编译它时,它会生成一个额外的类:Foo$1.class
并且该类几乎是空的。
我试图理解为什么会这样。由于限制,我无法提供有关代码的更多详细信息。
答案 0 :(得分:2)
虽然java允许访问同一.java
中其他类的私有成员,但JVM不支持此功能。
相反,编译器生成的代码通过生成的访问器方法提供对这些成员的秘密访问,例如访问$ 010()或生成的子类。确切地说,每个编译器如何执行它是一个实现细节。
我非常确定Oracle JDK 7不会这样做。
顺便说一下,使用Enum代替世界会更简单并创建更少的类。