Есть кусок кода - класс которые считает количество вызовов метода .add(). Необходимо заменить наследование композицией.
public static class CountableHashSet<E> extends HashSet<E> {
private int count = 0;
public CountableHashSet(){}
public CountableHashSet(int initCap, float loadFactor) {
super(initCap, loadFactor);
}
public boolean add(E e) {
count++;
return super.add(e);
}
public boolean addAll(Collection<? extends E> collection) {
count += collection.size();
return super.addAll(collection);
}
public int getCount() {
return count;
}
}
Вот мои соображения только код не работает
public static class CountableHashSet<E> {
HashSet<E> hs = new HashSet<E>();
private int count = 0;
public CountableHashSet(){
}
public CountableHashSet(int initCap, float loadFactor) {
HashSet<String> hs = new HashSet<String>(initCap,loadFactor);
}
public boolean add(E e) {
count++;
return hs.add(e);
}
public boolean addAll(Collection<? extends E> collection) {
count += collection.size();
return hs.addAll(collection);
}
public int getCount() {
return count;
}
}
Необходимо переопределить метод toString() чтобы получить ожидаемый вывод.
public class CountableHashSet<E> {
HashSet<E> hs = new HashSet<E>();
private int count = 0;
public CountableHashSet() {
}
public CountableHashSet(int initCap, float loadFactor) {
hs = new HashSet<E>(initCap, loadFactor);
}
public boolean add(E e) {
count++;
return hs.add(e);
}
public boolean addAll(Collection<? extends E> collection) {
count += collection.size();
return hs.addAll(collection);
}
public int getCount() {
return count;
}
@Override
public String toString() {
return hs.toString();
}
public static void main(String[] args) {
CountableHashSet<String> s = new CountableHashSet<>();
s.addAll(Arrays.asList("Q", "w", "df"));
System.out.print(s);
}
}
Так же конструктор public CountableHashSet(int initCap, float loadFactor) был реализован не очень хорошо, инициализировалась только локальная переменная.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей