虽然HashMap
项可以被删除,或者用户可能输入HashMap
中不存在的键,但是什么样的Try/Catch
我应该为 .get()
方法添加 block 吗?
这是我的代码示例:
public class ProjectModel {
private int size = 0;
private Project[] projects = new Project[100];
private HashMap<Integer, Integer> index = new HashMap<Integer, Integer>();
public Project create(){
Project project = new Project();
int id = project.getId();
projects[size] = project;
index.put(id, size);
size++;
return project;
}
public Project select(int id){
int i = index.get(id); //<----- get method here
Project project = projects[i];
return project;
}
public void delete(int id){
int i = index.get(id);
projects[i] = null;
index.remove(id);
}
}
<小时/>
附加说明: 我问这个是因为我不希望用户选择不存在的项目。 就像有 5 个项目,但我尝试 ProjectModel.select(6); 每当 HashMap.get() 返回 null 时,我想处理它(在我看来,这是流程的异常)。
编辑:
我已阅读答案的评论,谢谢。虽然我是 Java 新手,如果我的想法正确与否,请告诉我,请在评论中告诉我。
- 从“对象选择函数”返回 null 是可以的
- 最好在我调用 ProjectModel.select() 的地方进行错误处理,而不是在该单元内抛出异常。
最佳答案
从表面上看,这个语句不能抛出异常:
int i = index.get(id); //<----- get method here
index
字段不会为 null
,并且 get
不会引发 NPE。
但是……即便如此,NPE 也可能发生。问题是,如果 get(id)
返回 null
,则当您尝试拆箱 null
以将值分配给我
!
但是,正确的解决方案是避免 NPE,而不是捕获它。
Integer i = index.get(id);
if (i == null) {
// deal with this as appropriate
} else {
return projects[i];
}
关于java - 我应该为 HashMap.get() 使用什么 Try/Catch block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28654944/