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

wul*_*pro 1 java exception-handling exception

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.");
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 12

嗯,这是一个非常毫无意义的代码,你仍然会得到一个NullPointerException无条件调用的代码store.dropDatabase.你不会得到相同的消息,但堆栈跟踪会使它非常清楚.

在这种情况下,我会说它应该是一个IllegalStateException:

表示在非法或不适当的时间调用了方法.换句话说,Java环境或Java应用程序未处于所请求操作的适当状态.

听起来和我的情况完全一样.我还做了检查第一,就像这样:

if (store == null)
{
    throw new IllegalStateException("No valid database connection.");
}
store.dropDatabase(DATABASE);
Run Code Online (Sandbox Code Playgroud)

这样你就可以在方法开始时获得所有前提条件,然后专注于主体.

使用番石榴,我只需将其更改为:

Preconditions.checkState(store != null, "No valid database connection.");
store.dropDatabase(DATABASE);
Run Code Online (Sandbox Code Playgroud)