findViewById从文件加载资源。它返回某种
View,但是Java编译器无法知道它将是
DrawerLayout(因为它是在Java编译之外的文件中定义的)。
如果您需要将其作为
DrawerLayout代码中的a,则必须进行强制转换。这样可以确保(在运行时)它确实是这样的对象(如果不是,则将得到一个,
ClassCastException并且程序将在此时中断)。
之所以要强制转换,
DrawerLayout是因为您可能想在该类中定义的实例上调用方法。有时,仅使用更通用的超类的签名就可以了。然后,您不必强制转换。
可以肯定的
findViewById是,
DrawerLayout无论是否强制转换,返回的实例都是无关紧要的。但是,如果您不进行强制转换,那么Java将不允许您将其视为
DrawerLayout。这就是类型安全语言的要点:除非编译器可以确定对象属于某个类,否则它不会让您调用该类的方法(或访问字段)。



