为什么我们总是在 Android/Java 中输入强制类型转换?

2023-11-21

我正在编写一个 Android 应用程序,只是很好奇为什么我们必须始终在 Android 中进行类型转换。我知道我们需要确定类型,以便我们的代码正常运行,但是也许还有其他原因吗?

Example:

public class Navigation extends Activity {
    private DrawerLayout mDrawerLayout;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // other irrelevant code
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

在这个问题的上下文中,我问为什么我们必须对 findViewById 的返回值进行类型转换。 (我也很好奇这种类型转换是如何完成的,如果有人能解释一下的话。)


findViewById从文件加载资源。它返回某种View,但是 Java 编译器无法知道它将是DrawerLayout(因为它是在 Java 编译之外的文件中定义的)。

如果你需要它成为DrawerLayout在你的代码中,你必须强制转换它。 这确保(在运行时)它确实是这样一个对象(如果不是,您将得到一个ClassCastException并且您的程序将在此时中止)。

你想将其转换为的原因DrawerLayout是您可能想要调用该类中定义的实例上的方法。有时,您可能只需要更通用的超类的签名就可以了。那么你就不必投射它。

可以肯定的是,返回的实例findViewById is a DrawerLayout不管你施与不施。但如果你不强制转换它,那么 Java 不会让你把它当作一个DrawerLayout。这就是类型安全语言的要点:除非编译器可以确定某个对象属于某个类,否则它不会让您调用该类的方法(或访问字段)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我们总是在 Android/Java 中输入强制类型转换? 的相关文章

随机推荐