我有一个建模的对象:
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();
}
}
这似乎不起作用,因为条件总是错误的。我怎样才能实现目标?
我意识到这是一个什么样的黑客,但我正在问什么可能?如果是这样怎么样?
答案 0 :(得分:1)
这是instanceof
的意图:
Template t = something();
if (t instanceof SubTemplate) {
SubTemplate sub = (SubTemplate) t;
sub.getReport();
}
因此,在检查其类型后,您可以在不预期异常的情况下进行转换。
请注意,这通常被视为代码气味,请参阅注释以获取有关原因的更多信息的链接。