java - 可以在我知道不会为空的字段上使用断言吗?

标签 java minecraft bukkit

通过阅读现有帖子,我了解到不应在生产代码中使用“断言”,但是 IntelliJ 在使用我知道不会为 NULL 的方法时给我的第一个提示,但在其他方面仍然可以为 Nullable,是告诉我应该使用“断言” IntelliJ screenshot of tooltip

在上面的代码中,当创建一个新的 ItemStack 时,ItemMeta 不会为 null,但是如果 ItemStack 也为 null,它可以为 null,这就是它没有以 @NotNull 注释开头的原因。

知道了这一点,如何处理这个Warning才是最正确的呢?是因为我知道它永远不会为空而忽略它,还是仍然进行空检查。如果要进行空检查,断言或我已经在做的方式是

if(fillerMeta != null) 

最佳答案

I have come to learn that "assert" should not be used in production code

非常值得商榷。如果您断言 fillerMeta != null,则表示这不能为 null 或我的代码存在严重错误。

那太好了。但是如果你想断言某些东西,或者错误处理某些东西,你需要小心。断言类似 1 + 1 == 2 的东西很好,因为如果事实证明数学不能那样工作,那么您所做的所有其他假设也可能不成立。因此,程序爆炸就可以了。

如果 fillerMeta 可能为 null,因为它是从您认为可能返回 null 的函数返回的,您应该改为进行错误处理。例如。 if (fillerMeta == null) throw new Exception... 并优雅地处理它。

关于java - 可以在我知道不会为空的字段上使用断言吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57646350/

相关文章:

java - 通过 PHP Exec() 或类似函数启动 Minecraft_Server.jar

java - 64 位 Java 未正确安装

java - 尝试压缩 else if 语句

java - 为什么我不能从私有(private)类中的参数化构造函数调用默认构造函数?

java - JAVA制作幻灯片

java - ClassLoader.getResources() 返回空枚举

javascript - 将 Minecraft Pocket Edition mod 导入 Blocklauncher 时出错

java - NoSuchMethodError : com. google.common.cache.CacheBuilder.maximumSize(J)

java - JTabbedPane 给出空指针异常

java - p :inputText in p:dialog return empty values to bean