eh争议..这是一个好习惯吗?

时间:2011-08-08 06:16:24

标签: java exception exception-handling

在这种情况下是否建议使用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.");
    }
}

2 个答案:

答案 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。