2016-06-29 9 views
2

Collectionインターフェイスは、Collectionオブジェクトに適用可能な最も一般的な一般的な方法を定義します。具体的なクラスでコレクションインタフェースを直接実装できないのはなぜですか?

方法のいくつかは以下のようである:

1)boolean add(Object obj)

2)boolean addAll(Collection c)

3)boolean remove(Object obj)

4)boolean removeAll(Collection c)( オブジェクトの特定のグループを削除)

5)boolean retainAll(Collection c)(Removすべて以外のすべての要素cにある

このステートメントの正当性を知りたいと思います。

コレクションインターフェイス を直接実装する具体的なクラスはありません。

+0

'Collections'_interface_の目的は、すべてのコレクションが共有する共通の動作セットを定義することです。これらの振る舞いを実装することは、特定の実装(例えば、リスト、セット、マップ)に依存します。 –

+0

@SabirKhanあなたの編集は質問の大きな部分を殺しました。 –

+0

@ TimBiegeleisen-何かが起こったので、私はそのすべてを削除しませんでした。私は単純にテキストを引用し、コレクションとしてコードを強調表示しました。 –

答えて

3

Collectionの具体的な直接実装を作成することは何も止められません。しかし、そのような実装には、おそらくCollection契約の対象外のいくつかの追加の特性があります。

たとえば、Collection実装の要素に順序付けがある場合は、Listインタフェースを実装することもできます。

一方、Collection実装のストレージで重複要素が許可されない場合は、Setインタフェースを実装することもできます。

...など。

これは、標準コレクションライブラリの設計者が具体的な直接実装を必要としなかった理由を説明します。

+0

私は「それは必要ではありません」以上に進むでしょう。あなたが言及したことのために意味をなさない。 – oopexpert

+0

@oopexpert私たちが考えることができる共通のシナリオを考えれば意味がありません。それは意味をなさないいくつかの奇妙なシナリオがあるかもしれませんが、標準ライブラリはたぶん標準的なシナリオだけをカバーすることを目指しています。標準の実装では十分でない場合、独自のCollection実装を作成できます。 – Eran

+0

問題は、Java APIで定義されていないプロパティを誤ってサブインターフェイスに追加したり、サブクラスで実装したりするのが本当に難しいことです。結局のところ、コレクションインタフェースを直接使用すると、注文や一意性などの追加プロパティにコードを依存させることはできません。契約では何も教えてくれないからです。Collectionインタフェースは要素の追加と削除を定義するだけで完全に対称であり、すべてのサブクラスがこのコントラクトを処理します:したがって、直接実装するのは意味がありません。 – oopexpert

関連する問題