类型转换前先做检查

迄今为止,我们已知的RTTI形式包括:

  • 传统的类型转换,如"(Shape)",由RTTI确保类型转换的正确性,如果执行了一个错误的类型转换,就会抛出一个ClassCastException异常。
  • 代表对象的类型的Class对象。通过查询Class对象可以获取运行时所需的信息。
  • 关键字instanceof。它返回一个布尔值,告诉我们对象是不是某个特定类型的实例。可以用提问的方法使用它,就像这样:
if( x instanceof Dog)
    ((Dog)x).bark();

在将x转型成一个Dog前,上面的If语句会检查对象x是否从属于Dog类。进行向下转型前,如果没有其他信息可以告诉你这个对象是什么类型,那么使用instanceof是非常重要的,否则会得到一个ClassCastException异常。

一般,可能想要查找某种类型(比如要找三角型,并填充成紫色),这时可以轻松地使用instanceof来计数所有对象。例如,假设你有一个类的继承体系,描述了Pet(以及它们的主人,这是在后抽的示例中出现的一个非常方便的特性)。在这个继承体系中每个的每个Individual都有一个id和一个可选的名字。尽管下面的类都继承自Individual,但是Individual类复杂性比较高,

results matching ""

    No results matching ""