利用对象的Class辅助实现对多态容器中元素的查找
来源:互联网 发布:国家顶级域名us 编辑:程序博客网 时间:2024/06/06 02:38
有一个抽象类Resource, 以及直接继承自该类的多个子类,ResourceA,ResourceB, ResourceC, 这三个类都重定义了hashcode和equals函数,
public boolean equals(Object obj) {if (obj == null) {return false;}if (obj == this) {return true;}ResourceA resourceA = (ResourceA ) obj;if (.....) {return true;}return false;}
以及Job类,内含一个对Resource的list变量,来表示在该Job使用了哪些resource,
public class Job {private List<Resource> resourcesUsedInjob = new ArrayList<Resource>();}
同时还有一个JobContainer类,包含下列函数,
public Job getJobByResource(Resource resource) { synchronized (jobsInQueue) { for (Job job : jobsInQueue) { for (Resource resourceInJob : job.getResourcesUsedInjob()) { if (resource.equals(resourceInJob)) { return job; } } } return null; }}
该函数的本意是要根据传入的resource来获得包含该resource的Job,事实上,在这里
if (resource.equals(resourceInJob)) 调用equals时,存在一个bug。具体在equals函数中的下列语句 ResourceA resourceA = (ResourceA ) obj;
假设传入的Resource 为ResourceA,而当前迭代的job中包含的Resource为ResourceB, 那就会发生cast exception。
解决的办法是先在每次Resource的迭代中,对两个Resource 的Class进行一次比较和过滤。
public Job getJobByResource(Resource resource) {synchronized (jobsInQueue) {for (Job job : jobsInQueue) {for (Resource resourceInJob : job.getResourcesUsedInjob()) {if(resourceInJob.getClass().equals(resource.getClass())){if (resource.equals(resourceInJob)) {return job;}}}}return null;}}
0 0
- 利用对象的Class辅助实现对多态容器中元素的查找
- 容器放置元素(对象)后再对该元素进行操作能否改变容器中元素的值
- 原生js来实现对dom元素class的操作方法
- java中利用类名生成Class对象,通过class对象创建实体类的理解
- 对容器元素重新排序的算法
- Java中对生成Class对象的解释
- Jquery获取元素的父容器对象
- vector容器中元素初始化(容器的元素都是副本)
- javascript利用对象键值对中键的唯一性实现数组去重
- Hibernate中,利用Criteria查询容器实现sql的写法
- Hibernate中,利用Criteria查询容器实现sql的写法
- spring in action 学习笔记三:对spring 容器的理解,以及如何利用AnnotationConfigApplicationContext这个容器创建对象
- 利用一个辅助变量来实现sql语句的拼接
- multimap容器查找元素的三种方法总结
- 容器实现的查找最大序列
- c++ find 在容器中查找元素
- 原生js 查找 添加 删除 指定元素的class
- Spring 对hibernate事务处理的实现过程(辅助) ThreadLocal
- 第七章 查找技术
- 在Ubuntu 上使用git
- hadoop运行WordCount程序
- 重载RibbonButton,可以动态更改图标。
- 统计代码的行数 c实现
- 利用对象的Class辅助实现对多态容器中元素的查找
- 黑马程序员——多线程
- 暑期大作战第四天
- searchcode 代码搜索引擎及使用
- 设计模式之MVC模式
- 实现RTP协议的H.264视频传输系统
- 广搜 象棋格
- 数学之路-python计算实战(14)-机器视觉-图像增强(直方图均衡化)
- 【2-sat】uva1391