Java は、その強力なオブジェクト指向プログラミング機能により、柔軟で効率的なコードを開発するための複数のメカニズムをプログラマに提供します。見落とされがちだが重要な概念の 1 つは分散です。 Java をマスターするには、特にジェネリックやコレクションを扱う場合、分散を理解することが重要です。この記事では、Java の分散について詳しく説明し、その種類 (共分散、反分散、不変) とその実際の応用について説明します。
分散を理解する
分散とは、より複雑な型のサブタイプとそのコンポーネントのサブタイプの間の関係を指します。簡単に言うと、これらのクラスが型パラメーターとして使用されるときに、クラスの型階層がどのように保持されるかを決定します。バリアントは、ジェネリックスを扱う場合に特に重要になり、割り当てにある程度の柔軟性を与えながら型の安全性を確保するフレームワークを提供します。
分散は主に 3 つのタイプに分類できます。
共分散 - ClassBがClassAのサブクラスの場合、CollectionはCollectionのサブクラスとみなすことができます。
Contravariance - ClassB が ClassA のサブクラスの場合、Collection は Collection のサブクラスと見なされます。 p>
-
不変性 - ClassAとClassBの間の関係に関係なく、CollectionとCollectionにはサブタイプ関係がありません。
それぞれの概念をさらに詳しく見てみましょう。
Java の共分散
Java では、ワイルドカードと extends 句を使用して共分散を実現します。例を考えてみましょう -
リーリー
この場合、 Cat オブジェクトまたはその任意のインスタンスを cat に追加できますが、 cat から読み取り、その結果を Cat として扱うことはできません。これは、 Animal や Object などの Cat のスーパータイプが含まれる可能性があるためです。したがって、猫に書き込むことはできますが、タイプセーフな方法で読み取ることはできません
Java における不変性
不変性は Java のデフォルトの動作であり、ClassA と ClassB の間の関係に関係なく、Collection と Collection の間にサブタイプ関係がないことを意味します。これは制限があるように思えるかもしれませんが、型の安全性にとって重要です。 Java では、String は Object のサブタイプですが、List は List
以上がJavaの差異の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。