# Replace Multi Branch If By Switch

# Description

In Java 14, switch expressions (opens new window) turned into a standard feature. This rule replaces multi-branch if statements by corresponding switch expressions or switch statements with switch labeled rules. Because this rule removes a lot of redundant parts of code, readability is improved.

Requirements

  • Java 14

# Benefits

Removes code clutter. Improves readability.

# Tags

# Code Changes

# Initializing a Variable

Pre

		String weekDayName;
		if (weekDay == 1) {
			weekDayName = "Monday";
		} else if (weekDay == 2) {
			weekDayName = "Tuesday";
		} else if (weekDay == 3) {
			weekDayName = "Wednesday";
		} else if (weekDay == 4) {
			weekDayName = "Thursday";
		} else if (weekDay == 5) {
			weekDayName = "Friday";
		} else if (weekDay == 6) {
			weekDayName = "Saturday";
		} else if (weekDay == 7) {
    		weekDayName = "Sunday";
		} else {
			weekDayName = "";
		}

Post

		String weekDayName = switch (weekDay) {
		case 1 -> "Monday";
		case 2 -> "Tuesday";
		case 3 -> "Wednesday";
		case 4 -> "Thursday";
		case 5 -> "Friday";
		case 6 -> "Saturday";
		case 7 -> "Sunday";
		default -> "";
		};

# Computing a Returned Value

Pre

	String getWeekDayName(int weekDay) {
		if (weekDay == 1) {
			return "Monday";
		} else if (weekDay == 2) {
			return "Tuesday";
		} else if (weekDay == 3) {
			return "Wednesday";
		} else if (weekDay == 4) {
			return "Thursday";
		} else if (weekDay == 5) {
			return "Friday";
		} else if (weekDay == 6) {
			return "Saturday";
		} else if (weekDay == 7) {
			return "Sunday";
		} else {
			return "";
		}			
	}

Post

	String getWeekDayName(int weekDay) {
		return switch (weekDay) {
		case 1 -> "Monday";
		case 2 -> "Tuesday";
		case 3 -> "Wednesday";
		case 4 -> "Thursday";
		case 5 -> "Friday";
		case 6 -> "Saturday";
		case 7 -> "Sunday";
		default -> "";
		};			
	}

# Switch Expression with Throw Statement

Pre

	String getWeekDayName(int weekDay) {
		if (weekDay == 1) {
			return "Monday";
		} else if (weekDay == 2) {
			return "Tuesday";
		} else if (weekDay == 3) {
			return "Wednesday";
		} else if (weekDay == 4) {
			return "Thursday";
		} else if (weekDay == 5) {
			return "Friday";
		} else if (weekDay == 6) {
			return "Saturday";
		} else if (weekDay == 7) {
			return "Sunday";
		} else {
			throw new IllegalArgumentException("Invalid number for weekday");
		}			
	}

Post

	String getWeekDayName(int weekDay) {
		return switch (weekDay) {
		case 1 -> "Monday";
		case 2 -> "Tuesday";
		case 3 -> "Wednesday";
		case 4 -> "Thursday";
		case 5 -> "Friday";
		case 6 -> "Saturday";
		case 7 -> "Sunday";
		default -> throw new IllegalArgumentException("Invalid number for weekday");
		};			
	}

# Combining Cases

Pre

	String getTitle(int weekDay) {
		if (weekDay == 1 || weekDay == 3 || weekDay == 5) {
			return "Timetable For Monday, Wednesday, Friday";
		} else if (weekDay == 2 || weekDay == 4 || weekDay == 6) {
			return "Timetable For Tuesday, Thursday, Saturday";
		} else {
			return "Timetable For Sunday Or Holiday";
		}
	}

Post

	String getTitle(int weekDay) {
		return switch (weekDay) {
		case 1, 3, 5 -> "Timetable For Monday, Wednesday, Friday";
		case 2, 4, 6 -> "Timetable For Tuesday, Thursday, Saturday";
		default -> "Timetable For Sunday Or Holiday";
		};
	}

# Switch Statement with Switch Labeled Rules

Pre

		if (weekDay == 1 || weekDay == 3 || weekDay == 5) {
			setTitle("Timetable For Monday, Wednesday, Friday");
		} else if (weekDay == 2 || weekDay == 4 || weekDay == 6) {
			setTitle("Timetable For Tuesday, Thursday, Saturday");
		} else {
			setTitle("Timetable For Sunday Or Holiday");
		}

Post

		switch (weekDay) {
		case 1, 3, 5 -> setTitle("Timetable For Monday, Wednesday, Friday");
		case 2, 4, 6 -> setTitle("Timetable For Tuesday, Thursday, Saturday");
		default -> setTitle("Timetable For Sunday Or Holiday");
		}

You Want To Have Those Changes Done Automatically?

The automatic application of this rule is supported in the following jSparrow version:

# Properties

Property Value
Rule ID ReplaceMultiBranchIfBySwitch
First seen in jSparrow version 4.13.0
Minimum Java version 14
Remediation cost 15 min