I have the following classes inheritance structure:
public class Document {}
public class AuditProgramDocument extends Document {}
public class CaseFilePart {
private Document document;
public Document getDocument() {
return document;
}
}
public class MyClass {
public boolean canDeleteDocument(CaseFilePart selectedCFP) {
...//somelogic
if (selectedCFP.getDocument() instanceof AuditProgramDocument) {
System.out.println("instance");
}
}
}
In debugger, I clearly see that, selectedCFP.getDocument() returns AuditProgramDocument. But If statement doesn't evaluated.
My test:
System.out.println("2.1 " + selectedCFP.getDocument().getClassName());
System.out.println("2.2 " + selectedCFP.getDocument().getClass().getName());
System.out.println("2.3 " + selectedCFP.getDocument().getClass().getCanonicalName());
System.out.println("2.4 " + selectedCFP.getDocument().getClass().getSimpleName());
Results in output:
2.1 auditProgramDocument
2.2 eu.erp.crams.cmg.bom.document.Document$$_javassist_79_
2.3 eu.erp.crams.cmg.bom.document.Document$$_javassist_79_
2.4 Document$$_javassist_79_
selectedCFP.getDocument()before the if. In general: stuff works; if things are broken, then in 99.999999% of time, it is your code.2.1actuallyauditProgramDocument(lowercasea), or is itAuditProgramDocument(uppercaseA)?getClassName()means almost nothing. It’s not a standard Java method, it’s a method you wrote. Perhaps you should include the code for that method in your question. The code for thetoStringmethod of Document and its subclasses might also be useful.