Switch Expressionsに書き換える

しばらく放置していたが、Java 14から正式に追加されたSwitch Expressions、Java 21から追加されたPattern Matching for switchで既存の処理を書き換えることにした。

Java 11から21までの間のSwitch文の大きな変更は2つあって、分けて考えた方がわかりやすい。

Java 14で追加されたSwitch Expressions

これに書き換えることのメリットは2つと考えている。

1.breakが不要

Switch文から抜けるためのbreakが不要になった。breakがなくても同じように機能する。

例)変更前
switch (code) {
case 401, 403:
    model.addAttribute("errorTitle", "403");
    break;
case 404:
    model.addAttribute("errorTitle", "404");
    break;
default:
    model.addAttribute("errorTitle", "error");
}
変更後
switch (code) {
case 401, 403 -> model.addAttribute("errorTitle", "403");
case 404 -> model.addAttribute("errorTitle", "404");
default -> model.addAttribute("errorTitle", "error");
};

2.無駄な記述が減る

breakが不要になったことも含めて、無駄な記述を減らせる。

例)変更前
int multiple = 0;

switch (unitSign) {
case M_BYTE:
    multiple = 1024 * 1024;
    break;
case K_BYTE:
    multiple = 1024;
    break;
case BYTE:
    multiple = 1;
}
変更後
int multiple = switch (unitSign) {
case M_BYTE -> 1024 * 1024;
case K_BYTE -> 1024;
case BYTE -> 1;
};

Java 21で追加されたPattern Matching for switch

パターンマッチが使えるようになったが、正直すぐ使いそうなのはnullのチェックくらいだろうか。

例)変更前
public static FileConverter createConverter(FileType fileType) {
    if (fileType == null) {
        throw new FileException("errors.fileType");
    }

    switch (fileType) {
    case XML:
        return createXmlConverter();
    case EXCEL:
        return createExcelConverter();
    case CSV:
        return createCsvConverter();
    default:
        throw new FileException("errors.fileType");
    }
}
変更後
public static FileConverter createConverter(FileType fileType) {
    return switch (fileType) {
    case XML -> createXmlConverter();
    case EXCEL -> createExcelConverter();
    case CSV -> createCsvConverter();
    case null, default -> throw new FileException("errors.fileType");
    };
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です