微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么我们总是在Android / Java中键入强制类型转换?

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

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

之所以要强制转换,DrawerLayout是因为您可能想在该类中定义的实例上调用方法。有时,仅使用更通用的超类的签名就可以了。然后,您不必强制转换。

可以肯定的findViewById是,DrawerLayout无论是否强制转换,返回的实例都是无关紧要的。但是,如果您不进行强制转换,那么Java将不允许您将其视为DrawerLayout。这就是类型安全语言的要点:除非编译器可以确定对象属于某个类,否则它不会让您调用该类的方法(或访问字段)。

解决方法

我正在编写一个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);

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。