2011-08-08 57 views
1

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

回答

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); 
+0

'IllegalStateException'很合适。 –

+0

+1 for IllegalStateException – Nishant

+1

@Jon Skeet - 指向Guava的不错指针。 – wulfgarpro

0

这是确定的。理想情况下,您不应该需要编写if ... else,dropDatabase方法,如果以任何有用的方式使用store,将自动抛出NPE。

相关问题