JLS 8 указывает, что каждый класс перечисления имеет неявно объявленный метод:
public static E[] values();
Итак, это спецификация public
.
В то же время метод Class.getEnumConstantsShared()
принудительно делает его доступным:
final Method values = getMethod("values");
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<Void>() {
public Void run() {
values.setAccessible(true);
return null;
}
});
@SuppressWarnings("unchecked")
T[] temporaryConstants = (T[])values.invoke(null);
Мне интересно: какой смысл?