java - 我应该为 HashMap.get() 使用什么 Try/Catch block ?

标签 java hashmap try-catch

虽然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 新手,如果我的想法正确与否,请告诉我,请在评论中告诉我。

  1. 从“对象选择函数”返回 null 是可以的
  2. 最好在我调用 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/

相关文章:

javascript - JavaScript 对象的键是否存储在内存中?

java - 为什么 Java ME 没有异常处理程序?

r - 使用tryCatch在出错时跳过执行而不退出lapply()

java - 使 ListView 占满整个屏幕

java - Swt 表 getData() 转字符串列表

java - Eclipse RCP - 如何灰显相关首选项?

java - 在 Java Map 中查找与最大值关联的键

java - 比较 textview 和 JSONArray 中的值

java - HashMap的大小

java - 在 FileNotFoundException 的 catch 中嵌套 try-catch IOException