tex*_*nic 5 java exception hashmap
我有一个包含几个键值列表的类.每个键(在列表中)应该是唯一的,所以我使用HashMap.当代码中的某个地方我向列表添加一个新项目时,我正在使用HashMap put(K, V).如果尝试添加具有已存在密钥的项目,我希望我的代码抛出异常.并且,因为这样的添加是在程序的许多地方执行的,所以我想避免在每个地方添加检查.所以应该是列表类本身不允许替换现有的键值对.
我想用我自己的一个扩展HashMap类,它将执行这样的检查并抛出异常.但是,HashMap put不会抛出异常,所以我也不能这样做.
实现这种行为的好方法是什么?我准备好用更好的东西替换HashMap,但我需要它在添加和检索项目时都要快.
更新: 感谢所有许多好建议.由于我是一个完整的Java新手,我现在需要学到很多才能选择最好的一个:)无论如何,我很感激在午餐休息时间有这么多选择!
您可以使用Commons Collections,例如:
Map map = MapUtils.predicatedMap(new HashMap(), PredicateUtils.uniquePredicate(),
null);
Run Code Online (Sandbox Code Playgroud)
这将创建一个Map实例,当您在相同的密钥已存在时尝试插入键值对时将抛出异常.
当然,您可以通过构建自己的Predicate实例并使用它来代替它来自定义此行为PredicateUtils.uniquePredicate().你自己Predicate可以做任何你需要它做的事情,所以例如,它可能抛出一个不同于默认抛出的异常类型的异常uniquePredicate().
我不会扩展HashMap类,因为在这种情况下,它会导致违反Liskov替换原则,因为您改变了基类方法的行为.
相反,我会使用组合:
创建您的CustomHashMap类实现Map接口和HAVING HashMap字段.并重新声明HashMap类中存在的每个方法,为每个方法添加一个委托HashMap除了put()方法=>抛出异常(如果entry已经存在).
| 归档时间: |
|
| 查看次数: |
1220 次 |
| 最近记录: |