让我们考虑一下,我们创建一些集合让我们说Map:
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(10,20);
现在在示例中我们有“map”对象和方法“put”谁添加了一对我们的地图。 但是,折磨我的问题是我怎么知道,“put”方法正在工作,我将在没有代码执行的情况下进行新的记录,即没有运行测试。
答案 0 :(得分:3)
如果您查看Map::put()
API,您会看到:
<强>抛出:强>
UnsupportedOperationException
- 如果此地图不支持put操作ClassCastException
- 如果指定键或值的类阻止它存储在此映射中NullPointerException
- 如果指定的键或值为null并且此映射不允许空键或值
IllegalArgumentException
- 如果指定键或值的某些属性阻止它存储在此映射中
和
<强>返回强>
与key关联的先前值,如果没有key的映射,则返回null。 (如果实现支持空值,则null返回也可以指示映射先前将null与key关联。)
因此,使用try-catch
和返回值可以确保put
操作成功。
但是,如果您想完全确定,可以覆盖Map实现(在本例中为HashMap
)并创建业务逻辑。
在这种情况下,请使用put
并返回boolean
而不是投掷任何Exception
(或以您希望的方式处理它们)。
public class MyHashMap<K, V> extends HashMap {
@Override
public Boolean put(Object key, Object value) {
try {
super.put(key, value);
} catch (UnsupportedOperationException | ClassCastException | NullPointerException | IllegalArgumentException e) {
return false; // or do what you want!
}
return true;
}
}
以后使用它!:
Map<Integer, Integer> myMap = new MyHashMap();
// printing result
System.out.println(myMap.put(10,20));
// set result to a variable
boolean result = myMap.put(null,null); // result = true
// or even setting and evaluating
if (myMap.put(10,20)) {
// success action
} else {
// fail action
}
注意: 这是一个java 8实现
答案 1 :(得分:0)
在处理标准Java函数时,您可以阅读其API。例如map.put(K, V)。如果出现问题,将抛出异常 - 你必须抓住它并弄清楚出了什么问题。