Java instanceof 在我的情况下不起作用

标签 java instanceof

我有以下类继承结构:

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");
        }
    }
}

在调试器中,我清楚地看到,selectedCFP.getDocument() 返回 AuditProgramDocument。但是 If 语句没有被评估。

我的测试:

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());

输出结果:
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 文件$$_javassist_79_

最佳答案

因此,为了确保我们有以下规则:

AuditProgramDocument Document

CaseFilePart Document

当我们写代码时:

Document document = new AuditProgramDocument();
if (document instanceof Document) //true
if (document instanceof AuditProgramDocument) //true

但是,当我们编写代码时:

Document document = someVar.getDocument();
if (document instanceof Document) //true
if (document instanceof AuditProgramDocuemtn) //false

最后一个语句是 false 因为 Document 不是 AuditProgramDocument。因为 getDocument() 方法总是返回对 Document 的引用,而不是子类型

关于Java instanceof 在我的情况下不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37789460/

相关文章:

java - 糟糕的动态编程实现或 HashMap 慢?

java - 为什么要使用 instanceof 运算符?

java - 传递一个参数以供 instanceof 使用

java - Maven - 抑制 [WARNING] JAR 将为空 - 没有内容被标记为包含在 pom.xml 中

java - 如何提高我的程序速度

java - 寻找支持 JTA 的 NoSQL 数据库

java - Embedded Jetty 为什么要使用 join

java - 为什么 instanceof 不适用于 Generic?

java - 为什么不能将 "Class"变量传递给 instanceof?

JavaScript 类 : (instanceof this)