Java ジェネリックスの型パラメータ境界に「implements」を使用できないのはなぜですか?

DDD
リリース: 2024-11-02 03:40:30
オリジナル
1037 人が閲覧しました

Why Can't We Use

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 サイトの他の関連記事を参照してください。

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