为什么不使用 switch
语句:
switch(fileType) {
case CSV:
case TXT:
case FIXED_LENGTH:
doSomething();
break;
}
这个做法与你的if语句检查相同,但我认为这个更易读。
但是,这段代码存在的问题不在于 switch
或 if/else
语句。问题在于它违反了开闭原则。
为了解决这个问题,我将完全删除enum
并创建一个接口:
interface FileType {
boolean isInteresting();
}
那么,针对我们以前拥有的每个枚举常量,我会创建一个单独的接口实现:
public class Txt implements FileType {
@Override
public boolean isInteresting() {
return false;
}
}
switch
语句怎么改变了呢?我们之前是传递一个fileType
参数,然后检查它的值。现在,我们将传递一个FileType
实例。
public void method(FileType fileType) {
if (fileType.isInteresting()) {
doSomething();
}
}
这样的好处在于,当您引入新的
FileType
时(将其作为新的枚举常量引入),您不必修改
switch
/
if/else
语句来处理此新文件类型是否有趣的情况。该代码将在无需修改的情况下正常工作,这是“开放扩展,关闭修改”的开闭原则的精髓。
EnumSet
?还是在您的FileType
枚举上使用布尔字段? - khelwood