2016-12-20 3 views
0

У меня есть код, который имеет ArrayList и LinkedList и хотел бы реализовать пользовательский класс метода добавления, который я могу использовать для обоих случаев.Внедрить собственный метод добавления в Java

ArrayList<Integer> list = new ArrayList<Integer>(); 
list.add(anotherList); 

LinkedList<Integer> listTwo = new LinkedList<Integer>(); 
listTwo.add(newList); 

Я хотел бы регистрировать каждый метод добавления как для LinkedList, так и для ArrayList.

Я бы подумал, что реализация интерфейса интерфейса Java будет достаточной. Есть ли рекомендуемый подход к этому?

Я понимаю, что существует несколько способов решения этой проблемы.

+0

Вы может, конечно, переопределять методы и реализовывать эти интерфейсы, но я не совсем уверен, что вы подразумеваете под их использованием? Arraylist и Linkedlist - это принципиально разные структуры данных: первый - непрерывный блок памяти, а второй - несвязанный. Можете ли вы рассказать о том, что вы подразумеваете под «сделками с обоими случаями»? –

+0

* в обоих случаях * ... как в? – nullpointer

+0

@GurwinderSingh, что вы имеете в виду, может усовершенствовать? –

ответ

1

Если вы можете позволить себе включить Guava как зависимость, то у него есть готовое решение для делегирования коллекций по умолчанию: https://github.com/google/guava/wiki/CollectionHelpersExplained#forwarding-decorators

Пример перечисленных матчей ваш пример сценария использования:

class AddLoggingList<E> extends ForwardingList<E> { 
    final List<E> delegate; // backing list 
    @Override protected List<E> delegate() { 
    return delegate; 
    } 
    @Override public void add(int index, E elem) { 
    log(index, elem); 
    super.add(index, elem); 
    } 
    @Override public boolean add(E elem) { 
    return standardAdd(elem); // implements in terms of add(int, E) 
    } 
    @Override public boolean addAll(Collection<? extends E> c) { 
    return standardAddAll(c); // implements in terms of add 
    } 
} 
+0

Спасибо, но есть ли способ ванильного Java для этого? –

+0

Только создайте свой собственный «Список», который делегирует все методы (включая equals/hashCode) в базовый список. – Kiskae

+0

Спасибо. Я поддержал вас :) Есть ли хороший пример, где я могу найти реализацию Java-технологии? –

Смежные вопросы