В Java с Sun JDK 1.6 с таким перечислением:
public enum MyEnum {
FIRST_MEMBER { public void foo() { } },
SECOND_MEMBER { public void foo() { } },
THIRD_MEMBER { public void foo() { } };
}
Скомпилированные файлы:
MyEnum$1.class MyEnum$2.class MyEnum$3.class MyEnum.class
Это также означает, что трассировка стека показывает foo()
, или вызов метода, напечатанный в JVisualVM и т. Д., Будет иметь что-то вроде этого вверху:
mypackage.MyEnum$1.run()
* $1
в имени класса происходит из-за членов компилируемого перечисленияанонимным внутренним классам.Мне интересно, можно ли предположить, что числа, используемые в этих именах классов, соответствуют порядку, в котором определены члены перечисления?Если это не так, существует ли стандартный, гарантированный способ найти член enum по номеру, используемому в качестве имени анонимного класса?
EDIT
В отношении дизайнаenum, это использовалось только для иллюстрации.Реальное перечисление реализует интерфейс, и каждый член обеспечивает различную реализацию методов.Пожалуйста, не обращайте слишком много внимания на то, что по общему признанию выглядит немного странным.
РЕДАКТИРОВАТЬ # 2
Чтобы уточнить, я не пытаюсь что-либо делать с этой информацией программно (например, странные бессмысленные отражения).Скорее, я смотрю на трассировки стека и информацию о профилировании и пытаюсь сопоставить вызов метода для члена перечисления (показанный как вызов анонимного класса) с фактическим членом перечисления в исходном коде.