我正在编写一个Android应用程序,只是很好奇为什么我们必须始终在Android中进行类型转换.我知道我们需要确定类型以便我们的代码正常运行,但也许是另一个原因?
示例:
public class Navigation extends Activity {
private DrawerLayout mDrawerLayout;
@Override
public void onCreate(Bundle savedInstanceState) {
// other irrelevant code
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
Run Code Online (Sandbox Code Playgroud)
在这个问题的上下文中,我问为什么我们必须输入findViewById的返回值.(我也很好奇如果可以解释这种类型的铸造.)
Thi*_*ilo 12
findViewById从文件加载资源.它返回某种类型View,但Java编译器无法知道它将是一个DrawerLayout(因为它是在Java编译之外的文件中定义的).
如果你需要它DrawerLayout在你的代码中,你必须强制转换它.这确保(在运行时)它确实是这样一个对象(如果不是,你会得到一个ClassCastException,你的程序将在那时中止).
您希望将其强制转换的原因DrawerLayout是您可能希望在该类中定义的实例上调用方法.有时,你可能只使用更一般的超类的签名.那你就不必投了它.
可以肯定的findViewById是,DrawerLayout无论你是否投射,返回的实例都是一个.但是如果你没有强制转换它,那么Java就不会让你把它视为一个DrawerLayout.这是类型安全语言的要点:除非编译器可以确定某个对象属于某个类,否则它不会让您调用该类的方法(或访问字段).