Когда будет вызываться случай по умолчанию в переключателе для закрытой иерархииJAVA

Программисты JAVA общаются здесь
Anonymous
Когда будет вызываться случай по умолчанию в переключателе для закрытой иерархии

Сообщение Anonymous »

Учитывая закрытую иерархию, как показано ниже

Код: Выделить всё

sealed interface Shape permits Rectangle, Square

record Rectangle() implements Shape

record Square() implements Shape
Поскольку прямоугольник и квадрат являются записями, это по своей сути делает всю иерархию нерасширяемой, т. е. больше не допускается создание подклассов.
Начиная с JDK 21, сопоставление шаблонов для переключателя обеспечивает исчерпывающий выбор либо путем охвата всех возможных случаев, либо путем предоставления варианта по умолчанию для покрытия остальных. >
Итак, для приведенного ниже переключателя при каких обстоятельствах будет выполняться вариант по умолчанию, поскольку охватываются все возможные комбинации, и почему это вообще разрешено?

Код: Выделить всё

switch (shape) {
case Rectangle r -> // do something with r;
case Square sq -> // do something with sq;
case null -> // shape could be null
default -> // WHY is this permitted when all possible cases are covered already??
}
P.S.: Запечатанная иерархия определенно может развиваться, но когда это произойдет, компилятор автоматически пометит переключатель, чтобы обновить себя.

Подробнее здесь: https://stackoverflow.com/questions/774 ... be-invoked

Вернуться в «JAVA»