Как Java включает перечисление? - PullRequest
1 голос
/ 05 января 2012

Я исхожу из c # и нахожу оператор переключения java немного запутанным.

Вы можете включить только символ, но можете включить перечисление.оно переключается внутри на значение?

Зачем вам добавлять методы в перечисление?

Ответы [ 3 ]

7 голосов
/ 05 января 2012

Похоже, предположение, лежащее в основе вашего вопроса, неверно.Вы можете включить enum значения, целочисленные типы (char, int, byte и т. Д.) Или String экземпляры.

Внутренне все переключатели компилируются в одну из двух инструкций, lookupswitch или tableswitch.Обе инструкции требуют, чтобы каждый случай был помечен отдельным целым числом.Когда вы используете значение enum, используется «порядковый номер» значения.При использовании экземпляров String компилятор вставляет дополнительный код, чтобы сопоставить каждую строку с уникальным значением.Другие типы используются напрямую.Вы можете прочитать об этом в другом ответе.

Методы в enum служат той же цели, что и методы в любом другом объекте.Вы можете использовать их для реализации полиморфного поведения, или как простые методы доступа, или как угодно.

2 голосов
/ 05 января 2012

Относительно "Почему вы хотите добавить методы в перечисление?"
В c # перечисление является ограниченным целым числом с некоторым синтаксическим сахаром, в java перечисление является реальным классом. Там действительно разные. Вы можете добавить метод в перечисление по той же причине, по которой вы добавляете его в любой другой класс, чтобы заставить его работать! Например, каждый раз, когда вы используете духовку переключателей для перечисления, вы можете прекрасно использовать метод перечисления вместо переключателя и быть более объектно-ориентированным. И если вам нужно переключить одно и то же перечисление более чем в одном месте, вам, вероятно, лучше использовать метод
вместо того, чтобы делать

switch(planet){
   case Mars: doWhatMarsDo();break;
   case Earth: doWhatEarthDo();break;
}

Вы можете написать

planet.doYourThing();
1 голос
/ 05 января 2012

Вторичный вопрос: потому что иногда перечислениям нужны методы, такие как получение свойств, вычисления и т. Д. Методы Enum чрезвычайно удобны и позволяют играть в некоторые интересные игры.1004 * не слишком искусно, используя свойства и методы enum для хорошего эффекта.

...