2016-12-20 11 views
0

私はArrayListLinkedListのコードを持っており、両方の場合に使用できるカスタムの追加メソッドクラスを実装したいと考えています。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

あなたは依存関係としてグアバを含めるように余裕があれば、それはデフォルトのコレクションを委任するための既製のソリューションがあります記載されている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を含む)を基になるListに委譲する 'List'を独自に作成するだけです。 – Kiskae

+0

ありがとうございます。私はあなたをupvoted :)私はバニラJavaの実装を見つけることができる良い例はありますか? –