即使捕获到异常,Lint也会警告可能的异常

时间:2018-01-10 19:58:26

标签: android android-studio

我有一个try块和一个捕获NullPointerExceptions的catch块。但是,Lint警告try块中的语句可能会导致NullPointerException,即使将捕获该异常。为什么我没有意识到我已经处理了异常的可能性?

我正在使用Android Studio 3.谢谢。

2 个答案:

答案 0 :(得分:1)

linter的工作是警告你可能成为问题的代码。其中一个内置规则检查可能导致NullPointerException s的解除引用;它不会检查是否发现了这个异常。

但是,我想知道为什么你catch (NullPointerException e)而不是简单地检查null值,然后主动处理它们。

答案 1 :(得分:1)

按照here的规定

  

程序不得捕获java.lang.NullPointerException 。运行时引发的NullPointerException异常表示必须在应用程序代码中固定基础的空指针取消引用。由于多个原因,通过捕获NullPointerException而不是解决基础问题来处理基础空指针取消引用是不合适的。 首先,捕获NullPointerException所带来的性能开销比简单地添加必要的null检查要大得多[Bloch 2008]。其次,当try块中的多个表达式能够引发NullPointerException时,很难或不可能确定哪个表达式负责该异常,因为NullPointerException catch块会处理从try块中任何位置抛出的NullPointerException。第三,在引发NullPointerException之后,程序很少保持预期状态和可用状态。尝试在第一次捕获和记录(或更糟糕的是,抑制)异常后成功继续执行。

     

同样,程序不得捕获RuntimeException,Exception或Throwable。很少有方法能够处理所有可能的运行时异常。当方法捕获RuntimeException时,它可能会收到设计者无法预料的异常,包括NullPointerException和ArrayIndexOutOfBoundsException。许多catch子句只是记录或忽略所包含的例外条件,并试图恢复正常执行;这种做法经常违反ERR00-J。不要抑制或忽略检查的异常。运行时异常通常表明程序中的错误应由开发人员修复,并经常导致控制流漏洞。

因此,当Android Studio“忽略” NullPointerException捕获块时,它看起来像是故意的行为,您不应该捕获NullPointerException,而只需检查null。

另请参阅this问题。