在这种情况下是否建议使用NullPointerException
:
/**
* Drop the database referenced by the singleton.
*
* @throws NullPointerException
*/
public static void dropDatabase() throws NullPointerException {
if (store != null) {
store.dropDatabase(DATABASE);
} else {
throw new NullPointerException("No valid database connection.");
}
}
答案 0 :(得分:12)
这是非常毫无意义的代码,如果它无条件地调用NullPointerException
,你仍然会得到store.dropDatabase
。你不会得到相同的消息,但堆栈跟踪会很清楚。
在这种情况下,我会说它应该是IllegalStateException
但是:
表示在非法或不适当的时间调用了某个方法。换句话说,Java环境或Java应用程序未处于所请求操作的适当状态。
听起来和我的情况完全一样。我也会先检查 ,如下所示:
if (store == null)
{
throw new IllegalStateException("No valid database connection.");
}
store.dropDatabase(DATABASE);
这样你就可以在方法开始时获得所有前提条件,然后专注于主体。
使用Guava,我只需将其更改为:
Preconditions.checkState(store != null, "No valid database connection.");
store.dropDatabase(DATABASE);
答案 1 :(得分:0)
没关系。理想情况下,您不需要编写if ... else
dropDatabase
方法,如果以任何有用的方式使用store
,将自动抛出NPE。