java的。方法返回Null。我必须生成什么例外?

时间:2012-02-28 15:50:10

标签: java error-handling nullpointerexception

我有这个行代码:

String name = Book.getName();

/*next lines of code*/

接下来,变量name处理其他代码而不进行任何检查。 在某些情况下,可能的情况是name=null和其他代码将以错误退出。

很糟糕。

另外,我无法访问其他代码。

那么,你怎么看,我的下一个实现是正确的

    try
    {
    String name = Book.getName();
    if(null== name)

    throw new NullPointerException("method 'getName' return null");

/*next lines of code*/
    }

    catch(NullPointerException e)
    {
    System.out.print("Hey! Where book name? I exit!");
    System.exit();
    }

在这种情况下我还有其他选择吗?

可以生成任何其他类型的Exception或仅生成NullPointerException

感谢。

修改

好的,

  String name = Book.getName();

想象一下代码行。在实际情况中,我有更复杂的代码:

List<Book> bookList= new ArrayList<Book>();
String name = null;

Iterator i = BookShop.getBooks.iterator(); //BookShop it is input parameter!

while(i.hasNext())
{

Book book = (Book) i.next;
name = book.getName();

nameList.add(name);


}

这个例子更全。

因此,在此代码中输入参数BookShop Object。

这个对象有什么问题?

  1. BookShop可以是NULL;
  2. 方法BookShop.getBooks()可以返回NULL;
  3. 此外,getName()也可以返回NULL

    那么,下一般问题:无法保证输入参数BookShop的正确性!

    我必须考虑所有可能的选项(3 NULL

    对我来说,添加常规try-catch块以及所有。

    没有

7 个答案:

答案 0 :(得分:3)

您可以通过扩展Exception类来创建您喜欢的任何例外,例如NoNameProvidedException。有很多例子可以帮助你做到这一点。

我想在您的情况下,如果ifnamenull只需要System.exit()就可以了,只需要{{1}}进行检查。

答案 1 :(得分:2)

您的代码有点不确定,但我认为您正在学习。您不需要显式抛出NullPointerException,您可以抛出您喜欢的任何异常。 但是你可能并不真的需要在这里捕获Exception,你可以检查null并正确处理这种情况,如果它是真的。

另外,请避免Yoda conditions。您的if声明应为

if name is null

所以

if (name == null)

答案 2 :(得分:1)

我可能会使用IllegalStateException

 String name = Book.getName();
 if (name == null) {
     throw new IllegalStateException
         ("Method foo must not be called when the book has no name");
 }

这实际上取决于国家的来源 - 这里不太清楚这里出了什么问题。

我当然不会开始捕获NullPointerException - 不应该明确捕获这样的异常(以及非法的状态)。让它们冒泡,如果合适的话,可以使用某种顶级处理程序。

答案 3 :(得分:1)

异常不应用于正常控制流程。只需使用if块:

String name = Book.getName();
if (name == null) {
    System.out.print("Hey! Where book name? I exit!");
    System.exit();
}

/*next lines of code*/

答案 4 :(得分:0)

在这种情况下使用try和catch是不必要的。你可以这样写:

if(Book.getName() != null)
   String name = Book.getName();
else
   //handle the situation with null

答案 5 :(得分:0)

在这种情况下你不需要抛出异常 - 只需处理null值即可。你好。

答案 6 :(得分:0)

Java更友好,不使用异常,只需检查返回值

String name = Book.getName();
if (name == null)
    System.out.print("Hey! Where book name? I exit!");
else {
    /*next lines of code*/
}