Java: несколько внутренних классов, сгенерированных из шаблона Singleton Holder

1

У меня довольно простой синглтон, который использует шаблон держателя (я показал только шаблон, а не другие детали):

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
    Если вы используете компилятор Eclipse, вы используете другой компилятор, который вы можете использовать в Maven через JDK 1.6 ... (в зависимости от того, что вы настроили) ... без pom-файла и т. Д., Трудно догадаться ...
  • 0
    Попробуйте изменить доступ к полю INSTANCE по умолчанию вместо частного. Вы все еще получаете дополнительный класс?
Показать ещё 3 комментария
Теги:
maven
singleton

1 ответ

2

В то время как Java позволяет получить доступ к закрытым членам других классов в том же .java виртуальная машина не поддерживает это.

Вместо этого компилятор генерирует код, который предоставляет секретный доступ к этому элементу через сгенерированные методы доступа, например, доступ к $ 010() или сгенерированным подклассам. Именно то, как каждый компилятор делает это, является детальностью реализации.

Я уверен, что Oracle JDK 7 этого не делает.

Btw, используя Enum, вместо этого мир будет проще и создать меньше классов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню