Есть ли способ принудительно выполнить исчерпывающую проверку всех значений перечисления, когда ветви коммутатора вызывают методы с типом возврата void? Довольно некрасиво жестко запрограммировать yield просто для того, чтобы заставить компилятор потребовать полноты.
Это мой текущий шаблон (методы дескриптора имеют тип возврата void)
int unused = switch (event.getEventType()) {
case ORDER -> { handle((OrderEvent) event); yield 0; }
case INVOICE -> { handle((InvoiceEvent) event); yield 0; }
case PAYMENT -> { handle((PaymentEvent) event); yield 0; }
};
Причина, по которой я хочу использовать выражение, состоит в том, чтобы получить ошибку компиляции, когда новое значение перечисления добавляется и не обрабатывается.
Consumer
может сопровождаться предложениями, сделанными на странице Как обеспечить полноту переключателя перечисления во время компиляции?. См. Также шаблон посетителя, описанный здесь. - person Naman   schedule 15.02.2021event
, а затем вызватьhandle
, передав само выражениеswitch
в качестве аргумента? - person Federico klez Culloca   schedule 15.02.2021event
так, чтобыhandle()
был перемещен туда? Тогда никакой переключатель не нужен, толькоevent.handle()
. - person John Bayko   schedule 16.02.2021