Exception 在方法开始时抛出NPE以进行错误检查
所以我在准备采访,在盖尔·拉克曼斯职业杯的一段视频中,一个家伙正在写一个简单的方法,它接受一个数组并用它做一些事情。她提到他缺乏错误检查,所以他在这行中加了这样的话:Exception 在方法开始时抛出NPE以进行错误检查,exception,error-handling,nullpointerexception,Exception,Error Handling,Nullpointerexception,所以我在准备采访,在盖尔·拉克曼斯职业杯的一段视频中,一个家伙正在写一个简单的方法,它接受一个数组并用它做一些事情。她提到他缺乏错误检查,所以他在这行中加了这样的话: public int max(int[] array) { if (array == null) throw new NullPointerException(); //method body } 像这样手动抛出NPE异常是否正确,该异常将在方法体中被抛出,因为它将在某个点使用数组引用 我可以
public int max(int[] array) {
if (array == null)
throw new NullPointerException();
//method body
}
像这样手动抛出NPE异常是否正确,该异常将在方法体中被抛出,因为它将在某个点使用数组引用
我可以看到,这种方法的一个可能优点是,它将输入无效与方法逻辑无效分离,并以某种方式创建空引用。否则会有点混乱,也许IllegalArgumentException会更好?在输入方法时立即抛出NullPointerException,而不是在完成某些处理后等待检测它,这没有什么错。如果该方法将失败,那么它也可能快速失败 Joshua Bloch的高效Java建议在这种情况下抛出NullPointerException而不是IllegalArgumentException第60项:支持使用标准异常 若调用者在某个参数中传递null,而该参数的null值是被禁止的,那个么按照惯例,将抛出NullPointerException而不是IllegalArgumentException
当传入非法的非null值时,应抛出IllegalArgumentException。只要输入该方法,就抛出NullPointerException,而不是在完成某些处理后等待检测它,这没有什么错。如果该方法将失败,那么它也可能快速失败 Joshua Bloch的高效Java建议在这种情况下抛出NullPointerException而不是IllegalArgumentException第60项:支持使用标准异常 若调用者在某个参数中传递null,而该参数的null值是被禁止的,那个么按照惯例,将抛出NullPointerException而不是IllegalArgumentException
当传入非法的非空值时,应引发IllegalArgumentException。还可以查看java自己的实用程序类java.util.Objects: 类型参数: T-引用的类型 参数: obj-用于检查空值的对象引用 message—在引发NullPointerException的事件中使用的详细消息 返回: obj如果不为空 抛出: NullPointerException-如果obj为null 从 结论
您是否使用该实用程序类是另一个问题,但它明确表明,Java语言背后的团队打算将NullPointerException用于这些目的。还可以看看Java自己的实用程序类Java.util.Objects: 类型参数: T-引用的类型 参数: obj-用于检查空值的对象引用 message—在引发NullPointerException的事件中使用的详细消息 返回: obj如果不为空 抛出: NullPointerException-如果obj为null 从 结论 是否使用这个实用程序类是另一个问题,但它明确地表明,Java语言背后的团队打算使用NullPointerException实现这些目的
public static <T> T requireNonNull(T obj,
String message)
public Foo(Bar bar, Baz baz) {
this.bar = Objects.requireNonNull(bar, "bar must not be null");
this.baz = Objects.requireNonNull(baz, "baz must not be null");
}