安卓然后和N-:捕获异常:空点除外

1elZ9bAmWOe1OyiLTA9ybfA

欢迎来到这个系列字节大小的博客文章的第四批, 在那里我们看看安卓然后和现在。我们将经历已经改变的Android开发的零碎部分,看看为什么和如何,他们今天是什么在不到五分钟的阅读。我们将涵盖布局、依赖性管理、背景工作、相机使用、导航等内容!

这一次,让我们谈谈。null

普通的Java

一开始,有Java 。

Java 被选为 Android 开发的首选编程语言的原因有很多,其中大部分来自虚拟机器的关键优势:隔离和便携性。与Java一起决定可能是在Android历史上的早期做出的,而这一决定的后果至今仍在显现,后来的加入导致案件升级至最高法院

作为开发人员,我们不得不管理的后果之一是,在 Java 中,字段、变量和参数可以为空。空表示不存在值,并且尝试在不存在的值上操作会抛出一个例外。执行以下操作是个坏主意,并会导致应用崩溃:

1gvz5tf55aq1oVfwIugZFlw

相反,良好的编程实践是(现在仍然是)进行防御性编程。这意味着无效检查:

在某些情况下,你可以期望事情永远不会是空的。在将参数传递到方法之前,您可以取消检查参数。如果你有在方法的所有调用点,你是安全的!

1rUnCDzldrueWewmwb3g_5w-1

但是,可能会有人来编写新代码,这些代码会以无效方式传递到您的方法中,因此您可能会考虑在方法内编写一张无效的检查,以防御性。这会导致重复。

1Kfu5waqCJTveAcboEAGpFg-1

Java + 空注释

NullPointer 例外在基于 Java 的应用程序中非常猖獗和毁灭性,因此引入注释是为了在编写代码时警告开发人员潜在的问题。这意味着当你需要防御性地取消检查时, 更多的确定性。

1tX65NtK5I1CuowcnZ3GDrA-1

然后,Lint 可以推断此注释代码内和周围出现无效问题,并生成警告以提示不安全代码可能存在的位置。随着时间的流逝,许多重要的 SDK 中都出现了无效注释,Android SDK 本身会逐渐注释其整个公共 API 表面。鉴于增量方法,NullPointer 例外在注释良好的代码中的流行率缓慢下降。直到,即新的竞争者进入环。

其他语言

与其试图将一个零安全系统与绒毛一起胶带,为什么不在类型系统中修复它呢?这是替代 JVM 语言(包括科特林语)的常见卖点。

爪哇是含蓄的与它的无效。如果你不用它们做任何事情(除了原始人),事情就无效了。科特林和其他JVM语言,如斯卡拉,通过明确来接近无效。相反,除非另有说明,否则类型是含蓄的,不是无效的。空仍然存在,但它的使用是由编译器建模和强制执行,这意味着几乎没有空点除外。

1pr5fLnlNKfWO97OQwbuvKg-1

因此,随着科特林在安卓系统开发中越来越被广泛采用,空点例外就成了过去。我们的应用不会崩溃,而是不会为应用的消费者崩溃——将错误转移至左侧,并促使我们更多地思考如何对可选性进行建模。