Dans ce cas, il faut séparer le code en deux fonctions.
public static void createFile(String name, String contents, boolean temporary) { if(temporary) { // save temp file } else { // save permanent file } }
public static void createFile(String name, String contents) { // save permanent file } public static void createTemporaryFile(String name, String contents) { // save temp file }
public class Bird { public double getSpeed() { switch (type) { case EUROPEAN: return getBaseSpeed(); case AFRICAN: return getBaseSpeed() - getLoadFactor(); case NORWEGIAN_BLUE: return isNailed ? 0 : getBaseSpeed(); default: return 0; } } }
public abstract class Bird { public abstract double getSpeed(); } public class EuropeanBird extends Bird { public double getSpeed() { return getBaseSpeed(); } } public class AfricanBird extends Bird { public double getSpeed() { return getBaseSpeed() - getLoadFactor(); } } public class NorwegianBird extends Bird { public double getSpeed() { return isNailed ? 0 : getBaseSpeed(); } }
Il est possible d'appliquer différents patterns pour éviter les conditions.
Seven Ways to Refactor Java switch Statements Archive du 10/11/2017 le 02/03/2020
On crée la même classe partout et on met dans une instance composite la méthode à exécuter. Si la méthode à exécuter peut varier dans le temps, on peut aussi mettre les différentes méthodes à exécuter dans une map. C'est plus rapide et plus facile à lire qu'un switch
.
public void example() { sumOf(null); } public static int sumOf(List<Integer> numbers) { if(numbers == null) { return 0; } return numbers.stream().mapToInt(i -> i).sum(); }
public void example() { sumOf(new ArrayList<>()); } public static int sumOf(List<Integer> numbers) { return numbers.stream().mapToInt(i -> i).sum(); }
public boolean horrible(boolean foo, boolean bar, boolean baz) { if (foo) { if (bar) { return true; } } if (baz) { return true; } else { return false; } }
public boolean horrible(boolean foo, boolean bar, boolean baz) { return foo && bar || baz; }