Java no lo obliga a tener una declaración "predeterminada", pero es una buena práctica tenerla todo el tiempo, incluso si es posible que no se llegue al código (ahora mismo). Aquí hay algunas razones:
Al tener una cláusula predeterminada inalcanzable, le muestra al lector de su código que ha considerado los valores y sabe lo que está haciendo. También permite cambios futuros, por ejemplo: se agrega un nuevo valor de enumeración, el interruptor no debe ignorar silenciosamente el nuevo valor; en lugar de eso, puedes lanzar una Excepción o hacer otra cosa.
Para capturar un valor inesperado (en caso de que no esté activando una enumeración) que se haya pasado, podría ser mayor o menor de lo que esperaba, por ejemplo.
Para manejar acciones 'predeterminadas' - donde los conmutadores son para un comportamiento especial. Por ejemplo, una variable puede declararse fuera del conmutador pero no inicializarse y cada caso lo inicializa en algo diferente. En este caso, el valor predeterminado podría inicializarlo a un valor predeterminado, por lo que el código inmediatamente después del cambio no produce un error / lanza una excepción.
Incluso si decide no poner nada en el valor predeterminado (sin excepciones, registro, etc.), incluso un comentario que diga que ha considerado que el hecho de que nunca ocurrirá puede ayudar a la legibilidad de su código; pero eso se reduce a las preferencias personales.