首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“instanceof”示例

“instanceof”示例
EN

Stack Overflow用户
提问于 2012-02-07 18:54:15
回答 7查看 66.4K关注 0票数 21
代码语言:javascript
复制
public class TableModel2 extends TableModel1 { ... }

TableModel2 tableModel = new TableModel2();

boolean t1 = tableModel instanceof TableModel1;
boolean t2 = tableModel instanceof TableModel2;

在上面的示例中,t1t2true。那么,我如何使用instanceof来区分TableModel1TableModel2

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-02-07 19:00:32

代码语言:javascript
复制
boolean t2 = tableModel.getClass().equals(TableModel1.class); //False
boolean t2 = tableModel.getClass().equals(TableModel2.class); //True
票数 18
EN

Stack Overflow用户

发布于 2012-02-07 18:59:00

您不能使用instanceof执行此操作,但可以使用getClass执行此操作

代码语言:javascript
复制
boolean t1 = tableModel.getClass().equals(TableModel1.class);
boolean t2 = tableModel.getClass().equals(TableModel2.class);

instanceof操作符用于检查类的所有层次结构,包括对所有接口的检查,直到java.lang.Object。它让你知道你拥有的对象的实例是否可以被转换成你指定的类型,而不会触发类类型转换异常。

另一方面,getClass返回给定对象的特定类。

票数 19
EN

Stack Overflow用户

发布于 2012-02-07 18:58:53

那么,我如何使用

区分TableModel1和TableModel2呢?

从技术上讲,您可以检查tableModelTableModel1的实例,而不是TableModel2的实例

代码语言:javascript
复制
(tableModel instanceof TableModel1) && !(tableModel instanceof TableModel2)

但是,我希望尽可能强烈地鼓励您避免任何基于instanceofgetClass()结果进行分支的代码。这样的代码在未来的变化面前是非常脆弱的。如果您发现自己正在按照这些思路做任何事情,这是一个强有力的线索,可能是重新审视您的设计的好时机。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9174966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档