我很想知道避免NullPointerException
的正确方法。
try
{
String name = null;
System.out.println("name=" + name.toString());
}
catch(Exception e)
{
System.out.println("Exception Occured" + e.getMessage());
}
这里我只是捕捉并显示异常消息。我想知道处理这种情况或避免这种情况的正确方法。
答案 0 :(得分:4)
你能详细说明你的意思是避免NPE吗?它可以通过多种方式完成。在你的情况下,你不应该将null
传递给你的字符串。
SO用户教给我的一般规则是始终尽早
对于参数验证,您很可能需要使用Objects#requireNonNull。
您也可以根据场景声明一个简单的if语句,如下所示 - if (name != null)
您还必须意识到,在某些情况下可能需要null
,因此处理此类NPE会有所不同。如果您不打算对Exception
实际执行某些操作,则不应该抓住它,因为它可能有害于捕获异常然后简单地丢弃它。
以下讨论了何时应该抛出异常 - When to throw an exception?
经过进一步调查,似乎Java 1.8还提供了一个新的Optional
类(java.util.Optional),它看起来非常有用和清晰。看一下这个Oracle document。
答案 1 :(得分:4)
除了捕获错误之外,如果你打算使用可能为null的东西,你可能想要抛出空检查。
你可以做些什么来减少必须进行空检查的机会,除非确实需要,否则永远不会从你的方法返回null
,例如:
public IList<String> getUserNames()
{
//No usernames found...
return new ArrayList<String>();
//As opposed to returning null
return null;
}
通过返回空列表,调用上面的代码会产生如下结果:for(String name : this.getUserNames()) {...}
。如果找不到用户名,则循环将不会执行。
另一方面,如果返回null,则需要执行以下操作:
List<String> userNames = this.getUsernames();
if(userNames != null)
for(String userName : userNames) {....}