装饰者模式为一个类添加附加的职责提供了方法,但我们装饰一个对象通常只是实现了该interface的方法,却忘记了Object的equals和hashcode的方法!!
在继承父类时,推荐建议是重写toString()方法。同样,我这里也推荐下,实现装饰者模式时,也同时复写equals和hashCode方法。
遇到的问题:
今天在处理Hadoop的Text的时刻遇到了一点问题,Text是Hadoop中功能类似于JDK中String的类。
MapWritable result = new MapWritable(); Map<String, Integer> resultTmp = new HashMap<String, Integer>(); for (MapWritable hmw : results.getResults()) { for(Writable writable:hmw.keySet()){ Text text = (Text)writable; String key = new String(text.getBytes()); Integer total = resultTmp.get(key); IntWritable increment = (IntWritable)hmw.get(writable); if (total!=null){ resultTmp.put(key, total+increment.get()); }else{ resultTmp.put(key, increment.get()); } } } for(String key:resultTmp.keySet()){ result.put(new Text(key), new IntWritable(resultTmp.get(key))); } return result;
上面得到的Key的String会多出一些空格。这是由于new String(text.getBytes())导致的。这里不需要转成为String,直接使用Text即可。
MapWritable result = new MapWritable(); Map<Text, Integer> resultTmp = new HashMap<Text, Integer>(); for (MapWritable hmw : results.getResults()) { for(Writable writable:hmw.keySet()){ Text key = (Text)writable; Integer total = resultTmp.get(key); IntWritable increment = (IntWritable)hmw.get(writable); if (total!=null){ resultTmp.put(key, total+increment.get()); }else{ resultTmp.put(key, increment.get()); } } } for(Text key:resultTmp.keySet()){ result.put(key, new IntWritable(resultTmp.get(key))); } return result;
考虑到另一个问题,equals和hashcode是否与String一样的呢!?加入到Map后?会不会导致覆盖呢?
这也是我写本文的一个重要根源所在。
--> Hadoop的源码还是OK的。
相关推荐
京龙玉发装饰公司网站源码是一款ASP ACCESS制作的装饰行业类企业网站源码。整站黑色大气,带FLASH引导页! 特别注意:请在IE浏览器或其他浏览器兼容模式下添加发布文章产品,否则不能发布。 ...
保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. 设计模式之 Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些...
装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案, 装饰模式 提供比继承更多的灵活性。动态给一个对象增加功能,这些功能可以再动态的撤消。增加由 一些基本功能的排列组合而产生...
有一个很棒的彩色和明亮自定义光标库,用于装饰您的chrome浏览器。如果需要,您可以轻松地应用默认光标,只需单击“默认光标”按钮即可。根据需要自定义Chrome浏览器。每个人都有自定义光标。只需安装扩展...
施工过程中,由于工程施工面积较大,1-5 以及外墙和屋顶同时施工,工期又比较紧,且各相关工程同时展开,施工人员复杂,材料运输、交叉施工麻烦,所以要求施工现场平面有一个合理的布局,而且要有科学严密的管理措施...
从多个类继承可能会有问题,特别是当超类具有相同的方法名称但签名不同时。 如果发生这种情况,工具将引发描述性错误,以确保合同的完整性。 装饰器在导入时进行评估。 然后会引发任何错误,而不是在实例化对象或...
为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;...
京龙玉发装饰公司网站源码是一款ASP+ACCESS制作的装饰行业类企业网站源码。整站黑色大气,带FLASH引导页!特别注意:请在IE浏览器或其他浏览器兼容模式下添加发布文章产品,否则不能发布。
在线蛋糕甜品店的网站通常包含以下几个方面的内容和功能:主页:网站的主页是用户进入网站的第一个页面,通常会展示一些精选蛋糕和甜品的图片和介绍,以吸引用户的注意力。主页还可能包含一些特别促销或最新的产品...
古典的色彩组合带有势力与权威的意味,强烈的宝蓝色(royal blue)是任何一个古典色彩组合的中间装饰色。它是如此地醒目,就算和其它的色彩搭配在一起,也毫不会逊色。 古典的色彩组合表示真理、责任与信赖。又因为...
让你身临其境的天空盒子,各类题材丰富,都是辛苦搜罗所得的高清exr格式,可以直接用于Unity开发,特别是VR游戏的开发。 内景、外景、城市、乡间、日出,夜晚,欧式宫殿,中式园林,应有尽有,可以在我的下载频道...
ReduxConnect for React路由器 您通常如何请求数据并将其存储到Redux状态?... 另一个将您的数据存储为redux状态,并将已加载的数据连接到容器。 注意 这是的分支和重构 安装及使用 使用 : $ npm install redux-co
注意:不建议使用此代码。 请改用 。 Ipython notifyer依赖于pync包,并且是您繁重的长函数的微型装饰器。 它在Ipython中特别有用,因为网络浏览器可能会导致大规模破坏:-) 相依性 ,它又是程序的包装 安装 pip ...
一个类或方法的装饰,其结合到该实例的方法所以this是总是正确的,即使当该方法被分离。 这对于像React组件这样的情况特别有用,在这种情况下,您通常将方法作为事件处理程序进行传递,否则需要使用.bind(this) 。 ...
我们的目标是提供一个有吸引力且直观的应用程序,该应用程序轻巧但功能齐全,没有太多的装饰。 介绍: PSMForums现在处于Beta版。 请注意,在发布稳定版本之前,某些功能可能仍然受到限制。 我正在不断更新这个...