다음과 같은 예를 생각해 용도 어디 클래스 TextFile
, XmlFile
, HtmlFile
, ShellScriptFile
, 등등, 클래스 SimpleFile
의 모든 서브 클래스이다. 그 유형에 따라 일반 파일의 내용을 검색하는 메소드가있는 클래스 FileOperations
을 쓰고 있습니다.자바 코드 리팩토링 : 여러 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()
을 사용하는 것이 더 좋습니까?
의견이나 제안에 감사드립니다.
속도가이 상황 –
에 전혀 관심입니다 File 클래스 또는 그 서브 클래스에 대한 제어가 없다 " –
나는 명시 했으므로 수퍼 클래스 나 서브 클래스에 쓸 수 없다. 나는 그들을 통제 할 권한이 없다. – Chiseled