2012-03-16 90 views
-3

我已經定義了一個函數:如何處理空例外在我的情況

public MyCar findCar(){ 
    MyCar car = CarManager.findCarById("U983"); //Nullpointer Exception here if no car be found 
    if(car!=null) 
     return car; 
    else 
     return null; 

} 

當我調用上面的函數在Java中,如果上述CarManager.findCarById()沒有發現任何汽車,它返回null,我嘗試在if condition檢查,如果是null回報null其他明智的回報car

findCar()功能總是停止並提高空指針異常時findCarById()沒有發現什麼車,沒有經過我的if condition。如何擺脫它?

============ findCarById()是一個庫API我不能修改=================

+5

請添加代碼CarManager.findCarById – chrisn 2012-03-16 12:01:54

+1

郵政培訓相關CarManager代碼。認爲你的問題在於這裏 – 2012-03-16 12:02:33

+1

不會在CarManager.findCarById()函數中得到答案嗎? – Till 2012-03-16 12:03:03

回答

4

投擲或捕捉NullPointerException異常是不是一個很好的主意。如果您可以修改findCarById,請更改它。

否則,你可以在這裏做的try-catch。

MyCar car = null; 
try { 
    car = CarManager.findCarById("U983"); 
} catch (NullPointerException e) { 
    car = null; 
} 
+0

請檢查我的更新,findCarById()是我無法修改的庫API – 2012-03-16 12:06:07

+2

捕獲nullpointerexceptions是邪惡 – oers 2012-03-16 12:07:37

+0

公平地說,它真的是)是邪惡的,b)外部圖書館的作家應該因爲從「查找」方法向你拋出異常而被槍殺。 – dty 2012-03-16 12:09:25

0

在靜態CarManager類中檢查(或發佈)方法「findCarById」。

+0

請檢查我的更新,findCarById()是我無法修改的庫API – 2012-03-16 12:06:17

0

你是說,你張貼的findCar()方法拋出一個NullPointerException?這是不可能的,因爲在該方法中沒有對象解除引用。

同樣,如果整體條件是沒有意義的。它說「如果汽車是空的,返回null,否則返回汽車」。你可能會說return car; - 它會有完全相同的效果。

0

如何修改findCar()這樣的:

public MyCar findCar(){ 
    MyCar car = null; 
    try { 
     car = CarManager.findCarById("U983"); //Nullpointer Exception here if no car be found 
    } 
    catch (Exception e){ 
     e.printStackTrace(); 
    } 
    return car; 
} 
+0

evil printStackTrace !!!! – Matt 2012-03-16 14:40:25

+0

但是讓人大開眼界的錯誤!!!! – tusar 2012-03-16 14:43:08