Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HashMap.get()应该使用哪个Try/Catch块?_Java_Hashmap_Try Catch - Fatal编程技术网

Java HashMap.get()应该使用哪个Try/Catch块?

Java HashMap.get()应该使用哪个Try/Catch块?,java,hashmap,try-catch,Java,Hashmap,Try Catch,虽然可以删除HashMap项,或者用户可以输入HashMap中不存在的键,但是我应该为.get()方法添加什么类型的Try/Catch块 下面是我的代码示例: public class ProjectModel { private int size = 0; private Project[] projects = new Project[100]; private HashMap<Integer, Integer> index = new HashMap&

虽然可以删除
HashMap
项,或者用户可以输入
HashMap
中不存在的键,但是我应该为
.get()
方法添加什么类型的
Try/Catch

下面是我的代码示例:

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);

    }



}
公共类项目模型{
私有整数大小=0;
私人项目[]项目=新项目[100];
私有HashMap索引=新HashMap();
公共项目创建(){
项目=新项目();
int id=project.getId();
项目[规模]=项目;
索引放置(id、大小);
大小++;
返回项目;
}
公共项目选择(int id){

int i=index.get(id);//您不需要try/catch块;
HashMap.get
将在缺少的键上返回
null
,如其Javadoc中所指定

返回指定键映射到的值,如果此映射不包含该键的映射,则返回null


您不需要try/catch块;
HashMap.get
将在缺少的键上返回
null
,如其Javadoc中所指定

返回指定键映射到的值,如果此映射不包含该键的映射,则返回null

HashMap.get()应该使用哪个Try/Catch块

无。
get()
方法不会引发任何缓存异常,因此不需要使用try-catch块来包装get调用

当然,您可能会得到一个
NPE
ConcurrentModificationException
,并且您可能希望为其设置一个try-catch块,但一般编程实践要求您不应处理此类运行时异常,而应编写避免此类异常的代码,如添加空检查

如果您只想查看条目是否存在,可以调用
containsKey()
meythod或检查get调用本身的返回值

public V get(Object key) {
    if (key == null)
        return getForNullKey();
    Entry<K,V> entry = getEntry(key);

    return null == entry ? null : entry.getValue();
}
public V get(对象键){
if(key==null)
返回getForNullKey();
Entry=getEntry(键);
return null==entry?null:entry.getValue();
}
若条目不存在,则返回值应为null

HashMap.get()应该使用哪个Try/Catch块

无。
get()
方法不会引发任何缓存异常,因此不需要使用try-catch块来包装get调用

当然,您可能会得到一个
NPE
ConcurrentModificationException
,并且您可能希望为其设置一个try-catch块,但一般编程实践要求您不应处理此类运行时异常,而应编写避免此类异常的代码,如添加空检查

如果您只想查看条目是否存在,可以调用
containsKey()
meythod或检查get调用本身的返回值

public V get(Object key) {
    if (key == null)
        return getForNullKey();
    Entry<K,V> entry = getEntry(key);

    return null == entry ? null : entry.getValue();
}
public V get(对象键){
if(key==null)
返回getForNullKey();
Entry=getEntry(键);
return null==entry?null:entry.getValue();
}

如果条目不存在,则返回值应为null。

对于
HashMap
get
方法,确实不需要使用
try/catch
,因为它不会引发任何异常,但是您可以将
创建
选择
删除
方法标记为
抛出自定义找不到id或
索引时出现异常。获取(id)
为空:

public void delete(int id) throws SomeCustomException {
    if (index.get(id) == null) {
        throw new SomeCustomException("No such element exists");
    }
    int i = index.get(id);
    projects[i] = null;
    index.remove(id);
}

对于
HashMap
get
方法,确实不需要使用
try/catch
,因为它不会引发任何异常,但是
可以将
创建
选择
删除
方法标记为
在找不到id时引发自定义异常
,或者
索引.get(id)
不能为空:

public void delete(int id) throws SomeCustomException {
    if (index.get(id) == null) {
        throw new SomeCustomException("No such element exists");
    }
    int i = index.get(id);
    projects[i] = null;
    index.remove(id);
}

从表面上看,此语句不能引发异常:

  int i = index.get(id); //<----- get method here

从表面上看,此语句不能引发异常:

  int i = index.get(id); //<----- get method here

看我的答案。你不需要尝试捕捉。看我的答案。你不需要尝试捕捉。@bot什么让你认为OP知道
get
返回null?@immibis足够公平,但这回答了问题吗?不。因为NPE仍然有机会。如果没有回答问题,为什么要投票?真的很惊讶这已经是一个问题了当它不询问问题时,两次向上投票。@bot因为它回答了实际问题(我如何知道该键是否存在于地图中?),即使它没有回答当前的问题,大概也是这样。@bot:使用try/catch处理NPE没有抓住要点;您应该用if语句检查null,而不是catch。try/catch中的包装
HashMap.get
没有抓住要点。@bot您认为OP知道
get
retur的原因是什么ns null?@immibis很公平,但这能回答问题吗?不。因为NPE仍然有机会。如果它不能回答问题,为什么Up会投票?当它没有回答问题时,它已经有两个Up投票了,真的很惊讶。@bot因为它回答了实际的问题(我如何知道密钥是否存在于地图中?),即使它没有回答当前的问题,大概也是这样。@bot:使用try/catch处理NPE缺少要点;您应该使用if语句检查null,而不是catch。try/catch中的Wrapping
HashMap.get
缺少要点。