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

非约会:

我正在编写一个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的返回值。(我也很好奇如果可以解释的话,这种类型的转换是如何完成的。)

锡洛:

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

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我们需要纯<?>在Java中?

为什么我们需要Java中的默认方法?

为什么我们为与Java中的对象引用类型不同的对象分配类型?

我们是否应该总是在第一行中检查java中方法的每个参数是否为null?

为什么我们在Java中使用clone()方法?

为什么我们需要Java中的弱引用

为什么我们在Java中使用接口引用类型?

为什么我们可以将Java接口转换为* any *非最终类?

为什么我们到底需要Java中的StringBuffer

为什么我们使用强制转换通过C中的malloc分配堆内存?

为什么我们不能将List <A>强制转换为List <B>

为什么我们需要Java中的Properties类?

为什么我们允许使用不完整类型的地址?

为什么我们不能总是在C中使用寄存器存储类?

为什么我们需要分开Apply和Applicative类型类?

为什么我们需要总结的类型?

为什么在使用指针初始化用户定义的结构时需要键入强制类型转换?

为什么我们从MultiByte转换为WideChar?

为什么我们需要为某些类型计算的输出指定精简类型(或等效的辅助)?

为什么我们在C中将整数值转换为指针类型

为什么我们在Typescript中需要任何类型?

为什么需要在Typescript中键入强制类型转换?

为什么我们要强制转换malloc的返回值?

为什么我们可以在不强制转换的情况下将32位的立即数整数赋给short类型的变量?

通用DAO为什么我们使用通用类型ID

什么时候使用类型推断?我们总是可以使用VAR吗?

Android绑定服务:为什么我们将此IBinder实例转换为IBinder实例?

如果字符文字总是 int 类型,为什么我们在 C 中有 char 类型?C 中的整个 char 类型不是多余的吗?

为什么我们需要对 Parse 方法返回的对象进行强制转换?