Ответ 1
Это не просто перечисление. Перечисления - это только особые виды классов. В общем, вы можете иметь несколько классов, объявленных в одном файле (пока два из них не являются общедоступными).
Я пошел на это интервью для позиции разработчика программного обеспечения, и они дали мне тест с некоторыми ситуациями с кодовым кодом, обычно 4 варианта для выбора.
В одном из вопросов было указано перечисление вне класса, я быстро проверил ответ "не компилировал" и пошел дальше с другими вопросами.
Это было что-то вроде:
enum Colors {BLUE,RED,GREEN}
class Test {
//other code, not really important with my question
}
Этот код действительно компилируется.
Помимо того факта, что такое интервью (возможно или не может быть полезно), чтобы узнать, является ли кто-то хорошим разработчиком, меня беспокоит то, почему я объявляю перечисление вроде этого? Почему я могу сделать это только с перечислением?
Я провел некоторое тестирование и выяснил, что он виден внутри класса, но не для других классов.
Sidenote: Я набрал очень плохо: P. Я получил максимальную теорию, но чуть ли не самую низкую возможную ситуацию в ситуациях с кодовым кодом. Я не думаю, что у меня получится.
Это не просто перечисление. Перечисления - это только особые виды классов. В общем, вы можете иметь несколько классов, объявленных в одном файле (пока два из них не являются общедоступными).
Нет, без модификатора доступа, перечисление является приватным пакетом. Это означает, что он может использоваться только классами в одном пакете. И вы можете не только сделать это с помощью перечисления, классы также могут быть сделаны частными.
Дополнительная информация: http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html
Иногда эта идиома может быть разумной - например, представьте, что у вас есть класс UploadHandler
(или что-то в этом роде), который может вернуть статус из загрузки. Мне представляется вполне возможным реализовать этот статус как перечисление - и поскольку перечисление (например, UploadStatus
) явно "принадлежит" классу UploadHandler, кажется, что объявить его в том же исходном файле. (Это предполагает, конечно, что он должен быть только пакетом-частным - если он действительно общедоступен, его нужно будет объявить в его собственном файле, что, вероятно, имеет смысл, если это уже не внутренняя вещь).
Как это бывает, в этом случае я, вероятно, сделаю его статическим внутренним классом, чтобы сделать отношения более явными. Но объявление нескольких классов в одном и том же исходном файле не всегда является плохим и иногда может помочь в удобочитаемости, полагая, что это пограничный тривиальный вспомогательный класс. (Точно так же я не думаю, что подобные классы должны делать что-то особенно сложное или неожиданное.)
Он компилируется на самом деле, на моем Eclipse!; -)
Несколько классов могут находиться в одном файле. Ограничение состоит в том, что открытый класс должен быть определен в файле с таким же именем.
Это видимость - это "пакет", поэтому он должен быть видимым и в других классах в том же пакете.
Что я могу сделать с этим перечислением?
Вы можете делать все, что хотите, с указанными ограничениями...
Примечание: хотя вы ошибались, вы не должны чувствовать себя слишком плохо, потому что это не очень хорошая практика. В нашей конфигурации CheckStyle внешние классы в том же файле, как это, рассматриваются как ошибки!
Перечисление указывает список постоянных значений, которые могут быть назначены определенному типу. Это может быть либо внутри, либо вне класса.