Java コレクション API の設計に関する FAQ
これは、API 全体でもっとも議論の余地のある設計上の決定事項です。静的な (コンパイル時の) 型チェックが望ましいのは明らかで、Java の標準でもあります。静的な (コンパイル時の) 型チェックが望ましいのは明らかで、Java の標準でもあります。可能ならばサポートしたかったのですが、これをサポートするとインタフェース階層のサイズが非常に大きくなり、実行時の例外の必要性を (かなり減らすことはできても) なくすことができません。
どのようにMicrosoft Accessの自動サイズテキストボックスに
Doug Lea は、インタフェース階層に可変性の特徴を反映したポピュラーな Java コレクションを作成しました。 しかし、そのコレクションパッケージのユーザーとしての経験から、このアプローチはもはや実行可能ではないと考えています。彼は、私信の中で「これを言うのはつらいが、強力な静的型設定は Java のコレクションインタフェースでは機能しない」と述べています。
問題を詳しく説明するために、階層に修正可能性という概念を追加しようとする場合、ModifiableCollection、ModifiableSet、ModifiableList、ModifiableMap の 4 つの新しいインタフェースが必要になります。以前は単純だった階層が複雑になります。また、削除オペレーションを持たない修正不可能なコレクションで使用するための新しい反復子が必要になります。この状態で、UnsupportedOperationException を排除することはできません。
セキュリティコードは何ですか
配列について考えます。配列にはほとんどの List 操作が備わっていますが、削除と追加の操作はありません。 配列は「固定サイズ」の List です。階層にこの概念を与えようとすると、VariableSizeList と VariableSizeMap の 2 つの新しいインタフェースが必要になります。VariableSizeCollection と VariableSizeSet は、ModifiableCollection と ModifiableSet に等しいので追加する必要はありませんが、一貫性のために追加しなければならない場合があります。また、変更不可能な List に対処するため、追加と削除のオペレーションをサポートしない新種の ListIterator が必要です。最初に必要だったのは 4 つのインタフェースだけでしたが、このように 10 ~ 12 個のインタフェースに加えて 2 個の新しい反復子インタフェースが必要になります。しかし、それでも十分ではありません。
コンボボックスslectedアイテムを使用する方法
ログ (エラーログ、監査ログ、修復可能なデータオブジェクト用のジャーナル) について考えます。これらは、本質的に追加専用シーケンスで、削除と設定 (置換) 以外のすべての List オペレーションをサポートします。ログには、新しいコアインタフェースと新しい反復子が必要になります。
修正不可能なコレクションとは対照的な、不変性のあるコレクション (つまり、クライアントによる変更が不可能で、かつ他のどんな理由によっても変化しないコレクション) についてはどうでしょうか。多くの人が、これがもっとも重要な特徴であると主張しています。 その理由は、複数のスレッドが (同期の必要なく) 同時に 1 つのコレクションにアクセスできるからです。型の階層にこれを追加するには、さらに 4 つのインタフェースが必要です。
これで、インタフェースの数は最大 20 個程度、反復子は 5 個になりました。 実際には、明らかにどのインタフェースにも適合しないコレクションが増えているのはほぼ確実です。たとえば、Map から返されるコレクションビューは本質的に削除専用コレクションです。また、値に基づいて特定の要素を拒否するコレクションもあるので、実行時の例外を排除することはできません。
議論と試行の末、実行時例外を発行できるコアインタフェースのごく小さなセットを提供することで問題全体を回避することが、道理にかなった技術的妥協案であるとの結論に達しました。
0 コメント:
コメントを投稿