型パラメータ境界で「extends T」は許可されるが、「implements T」は許可されないのはなぜですか?

Linda Hamilton
リリース: 2024-11-02 11:52:02
オリジナル
967 人が閲覧しました

Why is

型パラメーターの境界で「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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート