Метод getDeclaringClass()
из Enum
класс сначала смотрит вверх, является ли значение перечисления значением перечисления, то есть оно супер Enum
. Если нет, то возвращение супер-класса независимо от класса данный экземпляр был рожден:Перечисление, которое не является частью Enum?
public final Class<E> getDeclaringClass() {
Class<?> clazz = getClass();
Class<?> zuper = clazz.getSuperclass();
return (zuper == Enum.class) ? (Class<E>)clazz : (Class<E>)zuper;
}
Как экземпляр, метод getDeclaringClass()
работает на НЕ может быть instanceof
Enum
класс? Тип перечисления не может быть расширен, поэтому единственным суперклассом класса перечисления является Enum
.
Так что - в следующем примере:
public enum Dirs {
NORTH, SOUTH, EAST, WEST
}
Dirs
является подклассом Enum
. Однако у Dirs
не может быть самого подкласса - он не может быть расширен.
getDeclaringClass()
любого из четырех направлений - например NORTH.getDeclaringClass()
- Dirs
, что составляет NORTH.getClass()
.
Исходный код getDeclaringClass()
предполагает, что могут быть случаи, когда NORTH
может иметь суперкласс, отличный от Enum
. Я не понимаю, как это может произойти.
Что мне не хватает?
EDIT:
Более конкретно: Как может быть так, что NORTH.getDeclaringClass()
будет НЕ возвращение NORTH.getClass()
, который Dirs
.
Я считаю, что вы получили downvoted, потому что ваш код не будет компилироваться со стандартным классом 'java.awt.Pont', в то время как он верен для реализации, который я предоставил в редактировании. Надеюсь, вы не против, что я немного изменил ваш пост. – Pshemo
О, я предоставил код только для иллюстрации подкласса в перечислении, фактический метод 'move' вместе с классом« Point »абсолютно произволен. Вероятно, должен удалить мой ответ, так как принятый ответ схож. – Vlad
Поскольку ваш ответ правильный, я не думаю, что вы должны его удалить, но это не мое решение. – Pshemo