Java 空参数检查、断言或异常有什么更好的方法?

Java 空参数检查、断言或异常有什么更好的方法?,java,null,Java,Null,有时我看到程序员使用“assert”,有时我看到参数的null检查并抛出异常 最好的选择是什么?这取决于您的使用情况 如果希望参数显式不为null,则应断言或抛出IllegalArgusmentException 另一方面,如果它是null则可以,则只需检查not null并使用回退值赋值,然后继续执行代码始终考虑并非始终启用“断言”。这是你应该始终牢记的主要规则。可以将其视为一种机制,用于检测代码中的错误、不应发生的意外情况(前置/后置条件)。另一方面,如果有机会从调用者处获取空值,则抛出异常

有时我看到程序员使用“assert”,有时我看到参数的null检查并抛出异常


最好的选择是什么?

这取决于您的使用情况

如果希望参数显式不为null,则应断言或抛出
IllegalArgusmentException


另一方面,如果它是
null
则可以,则只需检查not null并使用回退值赋值,然后继续执行代码

始终考虑并非始终启用“断言”。这是你应该始终牢记的主要规则。可以将其视为一种机制,用于检测代码中的错误、不应发生的意外情况(前置/后置条件)。另一方面,如果有机会从调用者处获取空值,则抛出异常(即IllegalArgumentException)

例如:

  • 如果要为第三方创建库,则无法使用assert验证参数
  • 在私有方法中,可以使用assert包含必须满足的前置/后置条件

    • 我不知道我在哪里读到的,(也许有人会指出),但一般规则是这样的:

      1) 对于接口,请使用null检查,因为接口必须处理所有参数,包括null,但这并不禁止您另外引发异常

      2) 在异常情况下抛出异常,例如在不应将null作为参数的私有方法中


      3) 使用assert,但不要过分依赖它,因为它可以被禁用,并且不会包含在生成的字节码中。所以在开发时使用它,但不要用于实际环境。

      相关:是的,你是对的。如果我放置断言,那么我必须将-ea参数设置为VM,这并不总是可能的,谢谢