考慮下面的例子,其中類TextFile
,XmlFile
,HtmlFile
,ShellScriptFile
,等等,是類SimpleFile
的所有子類。我正在編寫一個類FileOperations
,它有一種方法,根據類型搜索通用文件的內容。Java代碼重構:多個instanceof操作用法
下面是一個代碼示例:
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()
會更好嗎?
我感謝您的意見或建議!
速度是在這種情況下 – 2014-09-25 14:41:01
沒有關注,因爲,我猜「我無法控制文件類或其子類「 – 2014-09-25 14:42:26
,正如我所說的,我無法寫入超類或子類。我無法控制他們。 – Chiseled 2014-09-25 14:43:13