Why is this an issue?

Many existing switch statements are essentially simulations of switch expressions, where each arm either assigns to a common target variable or returns a value. Expressing this as a statement is roundabout, repetitive, and error-prone.

Java 14 added support for switch expressions, which provide more succinct and less error-prone version of switch.

Noncompliant code examples

void countLetters(String day) {
  int numLetters;
  switch (day) {
    case "Monday", "Friday", "Sunday":
      numLetters = 6;
      break;
    case "Tuesday":
      numLetters = 7;
      break;
    case "Thursday", "Saturday":
      numLetters = 8;
      break;
    case "Wednesday":
      numLetters = 9;
      break;
    default:
      throw new IllegalArgumentException("Invalid day: " + day);
  }
  System.out.println(numLetters);
}
Day dayOfWeek(String text) {
  switch (text) {
    case "Monday":
      return Day.MONDAY;
    case "Tuesday":
      return Day.TUESDAY;
    case "Wednesday":
      return Day.WEDNESDAY;
    case "Thursday":
      return Day.THURSDAY;
    case "Friday":
      return Day.FRIDAY;
    case "Saturday":
      return Day.SATURDAY;
    case "Sunday":
      return Day.SUNDAY;
    default:
      throw new IllegalArgumentException("Invalid day: " + text);
  }
}

Compliant solutions

void countLetters(String day) {
  int numLetters = switch (day) {
    case "Monday", "Friday", "Sunday" -> 6;
    case "Tuesday" -> 7;
    case "Thursday", "Saturday" -> 8;
    case "Wednesday" -> 9;
    default -> throw new IllegalArgumentException("Invalid day: " + day);
  };
  System.out.println(numLetters);
}
Day dayOfWeek(String text) {
    return switch (text) {
      case "Monday" -> Day.MONDAY;
      case "Tuesday" -> Day.TUESDAY;
      case "Wednesday" -> Day.WEDNESDAY;
      case "Thursday" -> Day.THURSDAY;
      case "Friday" -> Day.FRIDAY;
      case "Saturday" -> Day.SATURDAY;
      case "Sunday" -> Day.SUNDAY;
      default -> throw new IllegalArgumentException("Invalid day: " + text);
    };
  }