我有以下内容:
fruitMap.remove(fruitId,fruitProperties);
fruitMap是:
private Map<FruitId,FruitProperties> fruitMap = new HashMap<FruitId,FruitProperties>();
当我尝试构建我的代码时,我得到一个:
ERROR The method remove(Object) in the type Map<MyImplementation.FruitId,FruitProperties> is not applicable for the arguments (Map<MyImplementation.FruitId,FruitProperties>)
有什么问题?
解决方法
remove(key,value)方法如果当前映射到value,则删除key的条目.该方法是在Java 1.8中添加的. Map接口的Javadoc提到了以下默认实现:
if (map.containsKey(key) && Objects.equals(map.get(key),value)) { map.put(key,newValue); return true; } else return false;
由于Objects类仅在Java 1.7中添加,因此对于Java 1.6,您必须自己编写相等性测试.因此,如果您不需要方法的返回值,则可以将map.remove(key,value)替换为:
if (map.containsKey(key) { Object storedValue = map.get(key); if (storedValue == null ? value == null : storedValue.equals(value)) { map.remove(key); } }
请注意,这不是线程安全的.如果从多个线程访问映射,则必须添加同步块.