2011-08-08 10 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

まあそれはそれは無条件にstore.dropDatabase呼び出された場合、あなたはまだNullPointerExceptionを取得したいという点ではかなり無意味なコードです。あなたは同じメッセージを得ることはできませんが、スタックトレースはそれをかなり明確にします。この場合

私はそれが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

それはOKです。理想的には、storeを便利な方法で使用すると、if ... elsedropDatabaseメソッドを書く必要はなく、自動的にNPEを投げます。

関連する問題