Java ジェネリックにおけるスーパータイプ境界の違い
Java では、型パラメーターの境界を定義するときに、「extends」の存在に気づいたかもしれません。ただし「実装」ではありません。この相違は、なぜそうなるのかを理解するという好奇心を引き起こしています。
なぜ "implements T" がないのですか?
スーパータイプの関係を示す "extends" とは異なります。サブクラスが同じインターフェースを共有する場合、「implements」は、そのクラスがインターフェースで指定されたメソッドを実装する実装関係を示します。この違いはコンパイル中に明らかになります。
以下の例を考えてみましょう:
<code class="java">interface C {} class A<B extends C> {} // Allowed class A<B implements C> {} // Not allowed</code>
最初の例では、型パラメーター B は、「extends」を使用してクラス C によって制限されています。これにより、B が C と等しいか、C のサブクラスになることが許可されます。2 番目の例では、「implements」が使用されており、B が C を実装するインターフェイスであることのみが許可されます。ただし、型パラメーターで実装インターフェイスを指定することはできません。
「extends T」の理由
Java の汎用制約言語は、スーパータイプの関係に焦点を当てています。 「extends」を使用すると、型パラメータを特定のスーパークラスまたはインターフェイスに制限し、型を常にそのスーパータイプに割り当てられるようにすることができます。これにより、Java の型安全性と継承原則が維持されます。
一方、「implements」は、スーパータイプ関係ではなく実装関係を定義するため、このパラダイムには適合しません。したがって、型パラメーターの境界を定義するには、「extends」が推奨される唯一のオプションです。
以上がJava ジェネリックスの型パラメータ境界に「implements」を使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。