Недавно я нашел этот маленький драгоценный камень в нашей базе данных на работе. Должен признаться, что я совершенно не представляю, почему это перечисление было написано именно так (имена изменены для защиты невинных):
package foo.bar;
import sun.misc.SharedSecrets;
import foo.baz.HasAGetValuesMethod;
public enum MysteryEnum implements HasAGetValuesMethod {
THINGY, BOB;
@Override
public MysteryEnum[] getValues() {
return SharedSecrets.getJavaLangAccess().getEnumConstantsShared(MysteryEnum .class);
}
}
В методе getValues() вместо простого вызова MysteryEnum. values()
он использует что-то под названием sun.misc.SharedSecret
для получения хэндла к чему-то под названием sun.misc.JavaLangAccess
, а затем использует that для получения массива всех значений перечисления. В Javadoc этого класса говорится о том, что делает метод, но я не могу найти много информации о том, зачем его вызывать.
Разработчика, который это написал, больше нет, поэтому я не могу его спросить. Я все равно спрошу свою команду, но у меня такое чувство, что ответ будет таким: "Не знаю, почему он так делает, но лучше его не менять". На данный момент я предполагаю, что это либо странный случай, когда кто-то не знает о существовании метода values()
, либо мое незнание библиотек sun.misc заставляет меня упустить что-то очевидное для других. Есть идеи, почему этот код был написан таким образом?