我有这个行代码:
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。
这个对象有什么问题?
NULL
; BookShop.getBooks()
可以返回NULL
; 此外,getName()
也可以返回NULL
。
那么,下一般问题:无法保证输入参数BookShop的正确性!
我必须考虑所有可能的选项(3 NULL
)
对我来说,添加常规try-catch
块以及所有。
没有
答案 0 :(得分:3)
您可以通过扩展Exception类来创建您喜欢的任何例外,例如NoNameProvidedException
。有很多例子可以帮助你做到这一点。
我想在您的情况下,如果if
为name
,null
只需要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*/
}