Я пытаюсь получить доступ к Enum класса внутри конструктора Enum того же класса.Вот способ, который я нашел, чтобы сделать это.
Java enum - Невозможно сослаться на поле, пока оно не определено
, которое компилируется просто отлично, но так как в нем многоформального кода я попытался заменить реализации интерфейса лямбда-кодом, но он не компилируется с ошибкой, такой как
Cannot reference a field before it is defined
Ниже приводится лямбда-замена, которую я сделал.
package test;
public enum Baz {
yin(() -> {
return Baz.yang;//doesnt compile. ->Cannot reference a field before it is defined
}),
yang(new OppositeHolder() {
@Override
public Baz getOpposite() {
return yin;
}
}),
good(new OppositeHolder() {
@Override
public Baz getOpposite() {
return evil;//BUT THIS COMPILES JUST FINE, EVEN THOUGH IT ACCESSES evil WHICH HAS BEEN DECLARED LATER.
}
}),
evil(new OppositeHolder() {
@Override
public Baz getOpposite() {
return good;
}
});
private final OppositeHolder oppositeHolder;
private Baz(OppositeHolder oppositeHolder) {
this.oppositeHolder = oppositeHolder;
}
private static interface OppositeHolder {
public Baz getOpposite();
}
}
Есть ли что-нибудь, что я мог бы сделать с помощью лямбда-выражений, так как я мог видеть много перечислений в этом классе, и я действительно не хочу повторять "котел"код.
РЕДАКТИРОВАТЬ Я знаю, что ошибка означает, что я не могу получить доступ к Enum, который был объявлен позже.Кроме того, я не могу сохранить имя enum в виде строки, так как для меня это будет кошмар обслуживания.Кроме того, мне любопытно, почему пример в ссылке компилируется, а мой нет.