Java语言方法返回Null.我必须生成什么异常



我有这行代码:

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对象。

这个对象有什么问题?

  1. BookShop可以是NULL
  2. 方法CCD_ 7可以返回CCD_

此外,getName()也可以返回NULL

所以,接下来的一般问题是:不能保证BookShop输入参数的正确性

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

对我来说,添加通用try-catch块等等。

没有?

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

我想在你的情况下,只要用if检查name是否是null就足够了,因为你只想做System.exit()

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

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

if name is null

所以

if (name == null)

我可能会使用IllegalStateException:

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

不过,这真的取决于这个州来自哪里——目前还不清楚这里出了什么问题。

我当然不会开始捕获NullPointerException——这样的异常(以及非法状态)不应该被明确捕获。让它们冒泡起来,如果合适的话,有一些顶级处理程序。

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

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

在这种情况下不需要使用try-and-catch。你可以这样写:

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

在这种情况下,您不需要抛出异常——只需处理null值就可以了。

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

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

最新更新