Замена наследования композицией

201
03 марта 2019, 03:30

Есть кусок кода - класс которые считает количество вызовов метода .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;
    }
}
Answer 1

Необходимо переопределить метод 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) был реализован не очень хорошо, инициализировалась только локальная переменная.

READ ALSO
Удалить все записи из Set в Aerospike

Удалить все записи из Set в Aerospike

Я использую вот эту библиотеку на java для работы с AerospikeДля удаления всего сета я сначала скачиваю все из него, а потом делаю удаление каждой...

241
Табуляция в файле css [закрыт]

Табуляция в файле css [закрыт]

Как сделать табуляцию в данном файле с помощью VS Code ?

240
&ldquo;Складываются&rdquo; ли медиа-запросы?

“Складываются” ли медиа-запросы?

Допустим, есть div с классом container и CSS код:

184
Закрепленное меню и соседний div

Закрепленное меню и соседний div

Есть закрепленный див (position: fixed;) например высотой 20px, он закрывает начало на 20px обычного следующего блокаПодскажите как можно исправить?

206