型パラメーターの境界で「extends T」は許可されるが、「implements T」は許可されないのはなぜですか?
Java で型の境界を定義する場合パラメータでは、「extends T」は使用できますが、「implements T」は使用できません。これは恣意的な区別のように見えるかもしれませんが、Java ジェネリックスの実装に根ざした特別な理由があります。
この違いの理由は、継承と実装のセマンティクスにあります。 Java では、クラスは 1 つのインターフェイスのみを実装できますが、複数のクラスを拡張できます。したがって、型パラメーターの範囲で "extends" を使用すると、許可される型をより柔軟に指定できます。
例:
次のコードを考えてみましょう:
<code class="java">public interface C {} public class A<B extends C> {}</code>
型パラメータの範囲内で「実装」を許可する場合、このコードは有効になります。ただし、クラス B がどのインターフェイスを実装する必要があるかという問題が生じます。このコンテキストでは複数のインターフェイスがサポートされていないため、曖昧さが生じます。
一方、境界内で "extends" を使用すると、クラス B がインターフェイス C のサブタイプであることが保証されます。これは次のとおりです。あいまいさをまったく導入しない、より一般的な制約です。
したがって、Java は、インターフェイスの型パラメーター境界での「extends」の使用を制限することにより、ジェネリック実装の一貫性と明確性を保証します。
以上が型パラメータ境界で「extends T」は許可されるが、「implements T」は許可されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。