java - 处理 Android Studio 的 NullPointerException lint 警告的正确方法

标签 java android nullpointerexception android-studio lint

我是 android/java 编程新手,很困惑如何正确处理此警告。

Method invocation '' may produce 'Java.lang.NullPointerException'

enter image description here

我应该使用 assert 来删除警告吗? enter image description here

或者更确切地说是运行时异常? enter image description here

任何帮助将不胜感激。

最佳答案

我怀疑这个问题能否得到最终回答,因为这是一个见仁见智的问题。或者至少我是这样认为的——也是一种观点。 :)

我知道您想要“0 个警告”(一个非常值得称赞的目标),但可能没有“一刀切”的问题。那就是……

我认为你应该做的事情:

  • 使用断言。虽然您可以添加断言语句,但 Dalvik 会忽略它们。如果你愿意,你可以配置一个模拟器来使用它们,但不是一个真实的设备(见 Can I use assert on Android devices?)。因此,虽然它可能会删除警告,但在实践中它是无用的。
  • 让方法抛出 NullPointerException。一般来说,这将是一个坏主意。在这种情况下,由于您可能覆盖 onOptionsItemSelected(),因此它甚至是不可能的。

检查 (variable != null) 通常是最好的方法。但是,如果是,该怎么办,提供了一些其他选择。

  • 如果这是一个问题,您可以恢复,即即使 searchView 不存在,您也可以继续应用程序,只要这样做。例如,只需从方法返回。不过,最好记录这种情况,这样您就可以在测试时发现它。
  • 否则,如果无法继续,则抛出异常。你想fail early ,以便可以轻松检测到问题。对于这种情况,一个合理的异常(exception)是 IllegalStateException(参见 Java equivalent to .NET System.InvalidOperationException)。它基本上表明该方法是在不适当的时间执行的。但请注意,作为 RuntimeException,这些异常是未经检查的,因此可能会导致应用崩溃。

关于java - 处理 Android Studio 的 NullPointerException lint 警告的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23371938/

相关文章:

java - 如何检测 SOAP 消息中是否存在命名空间前缀

java - 使用 Unix Socket 的 JDBC MySQL 连接

java - ActiveMQ 浏览器需要很长时间才能执行最后一个 .hasMoreElements()

android - 单击硬件设置按钮时应用程序崩溃

Android:来自 BroadcastReceiver 的通知

java - 无法将数据检索到 ListView - android

android - 处理空服务器响应情况

java - 如何使用 htmlunitdriver 进行网页抓取?

android - Android 中 v4 和 v13 支持库的区别

java - 在 NullPointerException 和 IllegalArgumentException 之间进行选择以在对象构造时发出错误信号