【发布时间】:2014-09-25 14:35:35
【问题描述】:
考虑以下示例,其中类 TextFile、XmlFile、HtmlFile、ShellScriptFile 等都是类 SimpleFile 的子类。我正在编写一个类FileOperations,它有一个根据类型搜索通用文件内容的方法。
以下是代码示例:
public searchFile(SimpleFile targetFile, String searchStr) {
if (targetPage instanceof HtmlFile) {
// search html file
}
else if (targetPage instanceof TextFile) {
// search text file
}
else if (targetPage instanceof XmlFile) {
// search xml file
}
else if (targetPage instanceof ShellScriptFile) {
// search shell file
}
...
}
这个结构对我来说很难闻。我知道这是多态性的最佳情况。但我无法控制 File 类或其子类。我无法给它们写信。
还有其他方法可以清理这个烂摊子吗?因为随着我添加对不同文件类型的支持,if-else 结构会不断增加。
否则,如果我坚持这个结构,那么instanceof 是 Java 中最快的运算符吗?它对性能有何影响?
对于上述情况,使用getClass() 或isAssignableFrom() 会更好吗?
感谢您的 cmets 或建议!
【问题讨论】:
-
在这种情况下速度无关紧要
-
因为,我猜“我无法控制文件类或其子类”
-
正如我所说,我不能写给超类或子类。我无法控制它们。
标签: java refactoring polymorphism operators instanceof