Why does the switch below compile without a default branch in modern Java?
sealed interface Expr permits Num, Add {}
record Num(int v) implements Expr {}
record Add(Expr l, Expr r) implements Expr {}
int eval(Expr e) {
return switch (e) {
case Num n -> n.v();
case Add a -> eval(a.l()) + eval(a.r());
};
}