首页 > 代码库 > 第四章:类和接口。ITEM16:复合优先于继承。
第四章:类和接口。ITEM16:复合优先于继承。
1 package com.twoslow.cha4; 2 3 import java.util.Collection; 4 import java.util.HashSet; 5 6 /** 7 *这里我们需要扩展 HashSet 类,提供新的功能用于统计当前集合中元素的数量, 8 *实现方法是新增一个私有域变量用于保存元素数量, 9 *并每次添加新元素的方法中更新该值,10 *再提供一个公有的方法返回该值 11 */12 public class InstrumentedHashSet<E> extends HashSet<E>{13 14 private int addCount = 0 ;15 16 public InstrumentedHashSet(){}17 18 public InstrumentedHashSet(int initCap , float loadFactor) {19 super(initCap,loadFactor);20 }21 22 @Override23 public boolean add(E e) {24 addCount++ ; 25 return super.add(e) ;26 }27 28 /*29 * hashSet中的addAll方法会调用add方法,计算addCount的时候会计算2次。30 */31 @Override32 public boolean addAll(Collection<? extends E> c) {33 addCount += c.size() ;34 return super.addAll(c);35 }36 37 public int getAddCount() {38 return addCount;39 }40 41 42 }
修订后的设计:
1 package com.twoslow.cha4; 2 3 import java.util.Collection; 4 import java.util.Iterator; 5 import java.util.Set; 6 7 public class ForwardingSet<E> implements Set<E>{ 8 9 private final Set<E> s ; 10 11 public ForwardingSet(Set<E> s) {12 this.s = s ;13 }14 15 @Override16 public int size() {17 return s.size();18 }19 20 @Override21 public boolean isEmpty() {22 return s.isEmpty();23 }24 25 @Override26 public boolean contains(Object o) {27 return s.contains(o);28 }29 30 @Override31 public Iterator<E> iterator() {32 return s.iterator();33 }34 35 @Override36 public Object[] toArray() {37 return s.toArray();38 }39 40 @Override41 public <T> T[] toArray(T[] a) {42 return s.toArray(a);43 }44 45 @Override46 public boolean add(E e) {47 return s.add(e);48 }49 50 @Override51 public boolean remove(Object o) {52 return s.remove(o);53 }54 55 @Override56 public boolean containsAll(Collection<?> c) {57 return s.containsAll(c);58 }59 60 @Override61 public boolean addAll(Collection<? extends E> c) {62 return s.addAll(c);63 }64 65 @Override66 public boolean retainAll(Collection<?> c) {67 return s.retainAll(c);68 }69 70 @Override71 public boolean removeAll(Collection<?> c) {72 return s.removeAll(c);73 }74 75 @Override76 public void clear() {77 s.clear();78 }79 80 @Override81 public boolean equals(Object obj) {82 return s.equals(obj);83 }84 85 @Override86 public int hashCode() {87 return s.hashCode();88 }89 90 @Override91 public String toString() {92 return s.toString();93 }94 95 }
1 package com.twoslow.cha4; 2 3 import java.util.Collection; 4 import java.util.Set; 5 6 public class InstrumentedSet<E> extends ForwardingSet<E>{ 7 8 private int addCount = 0 ; 9 10 public InstrumentedSet(Set<E> s) {11 super(s);12 }13 14 @Override15 public boolean add(E e) {16 addCount++ ;17 return super.add(e);18 }19 20 @Override21 public boolean addAll(Collection<? extends E> c) {22 addCount += c.size() ;23 return super.addAll(c);24 }25 26 public int getAddCount() {27 return addCount;28 }29 30 31 }
第四章:类和接口。ITEM16:复合优先于继承。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。