在我知道不会为空的字段上使用assert可以吗?

Ugl*_*leh 1 java minecraft bukkit

通过阅读现有文章,我了解到“断言”不应在生产代码中使用,但是IntelliJ给我的第一个技巧是,当我使用一种我知道不会为NULL的方法时,但在其他方面还是可以为Null的,是要告诉我应该使用“断言” IntelliJ工具提示的屏幕截图

在上面的代码中,创建新的ItemStack时ItemMeta不会为null,但是如果ItemStack也为null,则可以为null,这就是为什么它没有@NotNull批注的原因。

知道这一点,处理此警告的最正确方法是什么?是因为我知道它永远不会为空而忽略它,还是仍然进行空检查。如果要执行null检查哪种类型,请断言或我已经做过的方式是

if(fillerMeta != null) 
Run Code Online (Sandbox Code Playgroud)

hen*_*nry 5

我已经了解到“断言”不应在生产代码中使用

这是值得商榷的。如果您在断言fillerMeta != null,您是说这不能为null或我的代码有严重错误。

很好 但是,如果要声明某些内容或错误处理某些内容,则需要小心。断言类似的事情1 + 1 == 2是可以的,因为如果事实证明数学不能以这种方式起作用,那么您所做的所有其他假设也可能不在窗外。因此,程序只需爆炸即可。

如果fillerMeta可能为null,因为它例如是从某个函数返回的,那么您认为可能会返回null,则应改为执行错误处理。例如,if (fillerMeta == null) throw new Exception...并妥善处理。