java - AndroidStudio (IDEA) 代码检查:“...可能会产生 NullPointerException”
问题描述
我在Java中有以下代码:
String func() {
Object data = otherFunc();
return data.toString();
}
otherFunc() 是@Nullable 函数,它可以返回null。因此 IDE 将 toString() 方法突出显示为危险的,因为它可能导致 NullPointerException。
但就我而言,我对 otherFunc() 的非空结果有 100% 的信心。所以我在那里添加了一个断言条件:
String func() {
Object data = otherFunc();
MyAssert.notNull(data, some_debug_info);
return data.toString();
}
在 MyAssert.notNull() 调用中有一个空检查验证,如果它为空则抛出异常(带有一些额外的调试信息)。无论如何,Android Studio 都会突出显示 toString() ......
问题:
如何在 MyAssert.notNull() 调用之后指示“数据”对象不能为空?也许有一些@annotations?
代码中有很多类似的地方,所以解决方法应该只修改assert函数!
解决方案
IntelliJ 的Contract
注释可能是您正在寻找的。
用 should 注释您的方法@Contract("null, _ -> fail")
会告诉 IntelliJ,输入 null 作为第一个参数会导致异常,这意味着调用之后的任何代码都将假定它是非 null 的。
推荐阅读
- vue.js - Vue 同时调用所有挂载的函数(API 调用)
- python - 如何创建一个拼写检查器来读取正确拼写的 txt 文件,并根据他们的 txt 单词文件向用户建议更正选项
- bash - 如何在 unix 中基于一个公共列合并两个 .txt 文件。Unix
- javascript - 如何在文本框中设置限制并显示文本框的剩余字符?
- javascript - 使用 Beautifulsoup 和 Selenium 从 JavaScript 驱动的页面解析 URL
- android - Ionic Capacitor Background Geolocation 在后台模式下被杀死。集成它的最佳选择是什么
- r - R函数提取大于x的值
- flutter - AES 加密 - Dart 中的解密 - Flutter
- amazon-web-services - 如何将我的 Bigquery 查询转换为 AWS Athena 查询?
- agora.io - Agora 云录制不录制混音文件