Java 获取哈希映射

Java 获取哈希映射,java,hashmap,Java,Hashmap,获取哈希映射是一个问题 我尝试在if(BookValues.containsKey(ID))之外获取hashmap,我总是会得到: java空指针异常 代码如下: (假设已经声明了,我在hashmap中使用了Integer,Class) 每当我在contains键内编写代码时,它都会工作,但当我在contains键外编写代码时,它就会出错。我想把它放在.containsKey之外,因为这样会使我的代码更长,我想保存SPA,有人能给我解释一下吗 代码 int targetID = BookValu

获取哈希映射是一个问题

我尝试在
if(BookValues.containsKey(ID))
之外获取
hashmap
,我总是会得到:

java空指针异常

代码如下: (假设已经声明了,我在hashmap中使用了Integer,Class)

每当我在contains键内编写代码时,它都会工作,但当我在contains键外编写代码时,它就会出错。我想把它放在
.containsKey
之外,因为这样会使我的代码更长,我想保存SPA,有人能给我解释一下吗

代码

int targetID = BookValues.get(ID).BookID.intValue();
String targetTitle = BookValues.get(ID).Title.toString();
String targetAuthor= BookValues.get(ID).Author.toString();
int targetCopies=BookValues.get(ID).Copies.intValue();
有很多地方可以抛出异常

BookValues.get(ID)
将为您提供对象(如果该对象存在)或
null(如果不存在)。为避免可能出现的
NullPointerException
这一行应该被分解。以下假设地图的值是
BookValue
对象

BookValue value = BookValues.get(ID);
if (value != null) {
    int targetId = value.BookID.intValue();
    String targetTitle = value.Title.toString();
    String targetAuthor = value.Author.toString();
    int copies = value.Copies.intValue();
    // rest of code here
} else {
    // TODO do something if there's no value in the map for the specified key
}
请注意,通过这种方式,您还可以避免重复上的
.get(ID)


还可以考虑遵循

键不存在时,
HashMap
将返回null。当调用
BookValues.get(ID).Title.intValue()
并且
ID
不是映射中的现有键时,您希望它执行什么操作?出现了什么错误?请添加错误的堆栈跟踪。在执行进一步操作之前,为什么不在从hashmap获取密钥后应用null检查。同意“dazito”、“ernest_k”和“kamlesh pandey”。此外,空引用检查也是良好编程实践的一部分。
BookValue value = BookValues.get(ID);
if (value != null) {
    int targetId = value.BookID.intValue();
    String targetTitle = value.Title.toString();
    String targetAuthor = value.Author.toString();
    int copies = value.Copies.intValue();
    // rest of code here
} else {
    // TODO do something if there's no value in the map for the specified key
}