Hea*_*ser 28 java reflection evaluation inheritance
我有一个基类,Statement
,这是其它几类从,继承命名IfStatement
,WhereStatement
等...什么是在执行测试的最佳方式if
声明,以确定哪种类型的Statement
一个实例从派生类?
Dav*_*Ray 76
if(object instanceof WhereStatement) {
WhereStatement where = (WhereStatement) object;
doSomething(where);
}
Run Code Online (Sandbox Code Playgroud)
请注意,这样的代码通常意味着您的基类缺少多态方法.ie doSomething()
应该是一个Statement
被子类覆盖的方法,可能是抽象的方法.
ben*_*ith 62
if (obj.getClass().isInstance(Statement.class)) {
doStuffWithStatements((Statement) obj));
}
Run Code Online (Sandbox Code Playgroud)
这种技术的优点(与"instanceof"关键字相对)是你可以将测试类作为对象传递.但是,是的,除此之外,它与"instanceof"相同.
注意:我故意避免编辑类型实例检查是否正确.是的,在大多数情况下,最好使用多态.但这不是OP所要求的,我只是在回答他的问题.
你的问题的答案是instanceof.
但是,请记住,如果您的代码需要instanceof,则表明您的设计出现问题.在某些情况下,instanceof是合理的,但它们是相当例外的.通常,如果您的子类需要表现不同,则必须使用多态而不是if()s.
归档时间: |
|
查看次数: |
43645 次 |
最近记录: |