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中的WrappingHashMap.get
缺少要点。