public class TableModel2 extends TableModel1 { ... }
TableModel2 tableModel = new TableModel2();
boolean t1 = tableModel instanceof TableModel1;
boolean t2 = tableModel instanceof TableModel2;在上面的示例中,t1和t2是true。那么,我如何使用instanceof来区分TableModel1和TableModel2呢
发布于 2012-02-07 19:00:32
boolean t2 = tableModel.getClass().equals(TableModel1.class); //False
boolean t2 = tableModel.getClass().equals(TableModel2.class); //True发布于 2012-02-07 18:59:00
您不能使用instanceof执行此操作,但可以使用getClass执行此操作
boolean t1 = tableModel.getClass().equals(TableModel1.class);
boolean t2 = tableModel.getClass().equals(TableModel2.class);instanceof操作符用于检查类的所有层次结构,包括对所有接口的检查,直到java.lang.Object。它让你知道你拥有的对象的实例是否可以被转换成你指定的类型,而不会触发类类型转换异常。
另一方面,getClass返回给定对象的特定类。
发布于 2012-02-07 18:58:53
那么,我如何使用
区分TableModel1和TableModel2呢?
从技术上讲,您可以检查tableModel是TableModel1和的实例,而不是和TableModel2的实例
(tableModel instanceof TableModel1) && !(tableModel instanceof TableModel2)但是,我希望尽可能强烈地鼓励您避免任何基于instanceof或getClass()结果进行分支的代码。这样的代码在未来的变化面前是非常脆弱的。如果您发现自己正在按照这些思路做任何事情,这是一个强有力的线索,可能是重新审视您的设计的好时机。
https://stackoverflow.com/questions/9174966
复制相似问题