Почему enum может иметь конструктор, закрытый для пакета? - PullRequest
52 голосов
/ 13 октября 2011

Поскольку конструктор enum может вызываться только его константами, почему тогда он может быть закрытым для пакета?

Ответы [ 2 ]

91 голосов
/ 13 октября 2011

Конструктор на самом деле не является частным пакетом ... это неявно private способ, которым методы интерфейса неявно public, даже если вы не добавляете ключевое слово.

Соответствующий разделJLS ( §8.8.3 ) сообщает:

Если модификатор доступа не указан для конструктора нормального класса, конструктор имеет доступ по умолчанию.

Если для конструктора типа enum не указан модификатор доступа, используется конструктор private.

Ошибка времени компиляции, если объявлен конструктор типа enum (§8.9) publicили protected.

4 голосов
/ 13 октября 2011

Это особенность языка: конструкторы enum неявно закрыты.

Интересно, что если вы объявите конструктор enum, видимый для пакета, например:обратитесь к нему из другого класса в пакете.Если вы попытаетесь, вы получите ошибку компилятора:

Невозможно создать экземпляр типа MyEnum

...