我使用异常来尽早发现问题。例如:
public int getAverageAge(Person p1, Person p2){
if(p1 == null || p2 == null)
throw new IllegalArgumentException("One or more of input persons is null").
return (p1.getAge() + p2.getAge()) / 2;
}
我的程序永远不要传递null
此函数。我从来没有打算。但是,众所周知,编程中会发生意想不到的事情。
如果发生此问题,将引发异常,以便在导致程序其他位置出现更多问题之前,找出并修复该异常。异常会停止程序,并告诉我“这里发生了坏事,请修复它”。而不是null
在程序周围四处走动,从而导致其他地方出现问题。
现在,您是对的,在这种情况下,这null
将立即导致NullPointerException
立马,所以它可能不是最佳示例。
但以这种方法为例:
public void registerPerson(Person person){
persons.add(person);
notifyRegisterObservers(person); // sends the person object to all kinds of objects.
}
在这种情况下,null
参数as将在程序周围传递,并且可能在以后导致错误,这将很难追溯到其来源。
像这样更改功能:
public void registerPerson(Person person){
if(person == null) throw new IllegalArgumentException("Input person is null.");
persons.add(person);
notifyRegisterObservers(person); // sends the person object to all kinds of objects.
}
使我能够在其他地方引起奇怪错误之前发现问题。
另外,null
作为参数的引用仅是示例。从无效的参数到其他任何问题,可能有很多问题。最好早点发现它们。
所以我的问题很简单:这是好习惯吗?我将异常用作预防问题的工具是否很好?这是合法的例外适用还是有问题?