java - 如何覆盖 Map 的主要方法
问题描述
我正在尝试实现 Map 接口并希望覆盖其主要方法,但我的方法 put 不起作用。基本上我由于某种原因无法比较字符串。
import java.util.HashMap;
public class MapImpl implements Map {
private HashMap<Object, Object> aMap = new HashMap<>();
private int size = 0;
//should return value object on success put
@Override
public Object put(Object key, Object value){
String middleString = (String)(aMap.get(key));
String valueString = (String)(value);
if (middleString.equals(valueString)){
aMap.put(key,value);
} else {
aMap.put(key,value);
size++;
}
return value;
}
//should return value by key
@Override
public Object get(Object key) {
return aMap.get(key);
}
//should return count of all value objects in the map
@Override
public int size() {
return size;
}
//should return value object on success removing it by the key
@Override
public Object remove(Object key){
String returnedValue = (String)(aMap.get(key));
aMap.remove(key);
size--;
return returnedValue;
}
}
在put
我想通过将值作为字符串来比较我的 Map 中是否有键,但是当值为 null 时,它不会转换为字符串,所以我无法比较它,无论 ide 都不允许我将 null 放入 equals 或放入==
操作数以比较 if 语句中的字符串。
解决方案
您可以使用
if (Objects.equals(middleString, valueString)) {
而不是middleString.equals(valueString)
. 该Objects.equals
方法检查你传入的两个引用值是否为null,或者指向同一个对象,或者根据equals方法指向的对象是否相等。
如果您要自己编写相同的检查,它将如下所示:
if (middleString == valueString || (middleString != null && middleString.equals(valueString))
推荐阅读
- flutter - Flutter-根据我的代码如何使材料按钮在向左滑动时不可见并在向右滑动时重新出现
- compiler-errors - Springer 乳胶模板 SVJour3 f 的问题
- angular - 错误:使用“defer”时“observableFactory 不是函数”
- javascript - 动态添加“选择”选项后,选项不会显示在页面的选择/下拉菜单中
- vue.js - 显示带有事件的 HTML 内容,从 Vue 模板的后端加载
- c++ - 函数指针和任意参数
- r - 将数据点与 ggplot2 中的缺失值对齐,无需刻面
- python - 不知道为什么列返回零
- python - 任何 spritesheet 的可调用 spritesheet 类
- strapi - Strapi 标识符或密码无效