我有一个建模如下的对象:
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/