Я согласен с ответом x4u .
Кроме того, есть еще один случай, не упомянутый, но я думаю, что лучше использовать if
- else
блоков, чем switch
: когда проверяются дополнительные условия в каждом из case
блоков. с if
блоками. Я вижу эту смесь все время в существующем коде.
Например, я только что наткнулся на этот код, который имеет switch
в строке type
, а затем проверяет вторую строку extension
, используя if
в обоих case
инструкциях.
public abstract class Temp {
boolean valid;
public Temp() {
String type = getType();
String extension = getFilenameExtension();
switch(type) {
case "Image File": {
if(!".jpg".equals(extension) && !".png".equals(extension)) {
warnWrongImageFormat();
valid = false;
}
break;
}
case "Zip File": {
if(!".zip".equals(extension)) {
warnWrongZipFormat();
valid = false;
}
break;
}
default: {
valid = true;
break;
}
}
}
abstract String getType();
abstract String getFilenameExtension();
abstract void warnWrongImageFormat();
abstract void warnWrongZipFormat();
}
Вместо этого гораздо чище и менее сложно уменьшить это значение до одного if
else
public abstract class Temp {
boolean valid;
public Temp() {
String type = getType();
String extension = getFilenameExtension();
valid = true;
if("Image File".equals(type) && !".jpg".equals(extension) && !".png".equals(extension)) {
warnWrongImageFormat();
valid = false;
}
else if("Zip File".equals(type) && !".zip".equals(extension)) {
warnWrongZipFormat();
valid = false;
}
}
abstract String getType();
abstract String getFilenameExtension();
abstract void warnWrongImageFormat();
abstract void warnWrongZipFormat();
}