2012-03-16 81 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