У меня есть библиотека статических окончательных классов Java, которая описывает набор стандартов.Один из этих классов (упрощенный) ночью выглядит так:
public static final class ResponseControl {
public static enum EventStatus {
EVENT_RECEIVED,
EVENT_STARTED,
EVENT_COMPLETED;
}
}
Удобно включить enum EventStatusOption в качестве подкласса класса ResponseControl, потому что это то, что определено в документе стандартов, и именно там люди будутискать это.Это позволяет им говорить что-то вроде:
if (respCtl.status == ResponseControl.EventStatus.EVENT_STARTED) { ... }
Но у меня есть буквально сотни таких классов, и в некоторых случаях одно и то же перечисление используется в нескольких классах.Было бы неплохо иметь возможность определить перечисление где-то еще, а затем сделать что-то вроде этого:
public static enum GlobalEventStatus {
EVENT_RECEIVED,
EVENT_STARTED,
EVENT_COMPLETED;
}
public static final class ResponseControl {
public static enum EventStatus extends GlobalEventStatus {}
public final EventStatus status;
}
if (respCtl.status == ResponseControl.EventStatus.EVENT_STARTED) { ... }
Однако я не могу этого сделать, потому что расширять перечисления не разрешено даже(как в моем случае), где я вообще не хочу расширять их, я просто хочу сделать глобальный тип доступным в локальном классе.Кто-нибудь знает, как этого добиться?
Второй абзац ответа ColinD ниже - это тот ответ, который мне был нужен.Сказав:
public interface GlobalEvent
{
public static enum Status {
EVENT_RECEIVED,
EVENT_STARTED,
EVENT_COMPLETED;
}
}
public static final class ResponseControl {
public static enum Event implements GlobalEvent
public final Event.Status status;
}
, я могу позволить своим пользователям сказать:
if (respCtl.status == ResponseControl.Event.Status.EVENT_STARTED) { ... }
... все, сохраняя при этом фактические определения в одном месте.Спасибо.