Рассмотрим этот код:
enum Foo { A{}, B }
public static void main (String[] args) throws java.lang.Exception
{
System.out.println(Foo.A.getClass().isEnum());
System.out.println(Foo.B.getClass().isEnum());
}
Это напечатает :
false
true
Класс Foo.A
не считается перечислением; класс Foo.B
равен.
Это потому, что Foo.A
на самом деле является экземпляром подкласса Foo
, а не сам класс enum.
Непонятно, почему проверка на бите модификатора необходимо; Я бы сказал, что это может быть дешевле, чем последующая проверка, и, таким образом, избежать работы в общем случае, но это просто эталонное равенство, что не дорого. Возможно, это сделано для защиты от других языков JVM, не применяющих ограничение о невозможности расширения Enum
напрямую.