java - 如何检查对象是否属于子对象

标签 java inheritance design-patterns polymorphism

我有一个建模如下的对象:

public class Template {
    private Form form;
    public Form getForm() { return form; }
}

public class SubTemplate extends Template {
    private Report report;

    public Report getReport() { return report; }

}

public class AnotherSubTemplate extends Template {
    private Sheet sheet;

    public Sheet getSheet() { return sheet; }

}

我的目标:

我想知道如何检查在这种情况下我正在处理 Template 的基本对象是否正在行使多态性并且实际上是 SubTemplate,因此我可以从中检索报告对象它?

这就是我的意思,类似这样:

main() {
    Template t = something();
    if( t.getClass().isInstance(SubTemplate.class) ) {
        Report r = ((SubTemplate) t).getReport();
    }
}

这似乎不起作用,因为条件总是错误的。我怎样才能实现我的目标?

我意识到这有点像黑客攻击,但我所要求的可能吗?如果是这样怎么办?

最佳答案

这就是 instanceof 的用途:

Template t = something();
if (t instanceof SubTemplate) {
    SubTemplate sub = (SubTemplate) t;
    sub.getReport();
}

因此,在检查其类型后,您可以对其进行强制转换,而不会出现异常。

请注意,这通常被认为是代码异味,请参阅注释以获取有关其原因的更多信息的链接。

关于java - 如何检查对象是否属于子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49645261/

相关文章:

html - CSS - 样式不继承属性

javascript - 在 JavaScript 中实现单例的最简单/最干净的方法

java - 查找 Java 枚举的最佳实践

java - 无法在 CentOS 上使用 Tika 解析 Outlook 正文

java - 如何实现静态的项目范围偏好系统?

c# - 如何 "properly"覆盖基类方法?

c++ - 从具有多重继承的派生类调用所有基类的公共(public)命名方法

c++ - 将 RTTI 与从外部库派生的对象一起使用

java.util.concurrent.ExecutionException : java. lang.NullPointerException 错误

java - 从类(class)中调用文本到语音,与 Activity 类(class)分开