У меня было похожее требование, и я обошел эту проблему, включив порядковый номер Enums вместо включения самого перечисления. Это не очень красиво / интуитивно понятно, но работает:
public class Foo {
private final static int SRC = 0; // == RetentionPolicy.SOURCE.ordinal();
private final static int RT = 2; // == RetentionPolicy.RUNTIME.ordinal();
static{
if (RT != RetentionPolicy.RUNTIME.ordinal() || SRC != RetentionPolicy.SOURCE.ordinal()) {
throw new IllegalStateException("Incompatible RetentionPolicy.class file");
}
}
public static void main(String[] args) {
RetentionPolicy value = RetentionPolicy.RUNTIME;
switch (value.ordinal()) {
case RT: break;
case SRC: break;
}
}
}
Обратите внимание, что, конечно, невозможно объявить константу, например,
private final static int SRC = RetentionPolicy.SOURCE.ordinal();
по той же причине никто не может объявить константу как Enum в первую очередь ...