ホームページ > Java > &#&チュートリアル > Java ジェネリックを使用してクラスとインターフェイスの制約を組み合わせるにはどうすればよいですか?

Java ジェネリックを使用してクラスとインターフェイスの制約を組み合わせるにはどうすればよいですか?

DDD
リリース: 2024-12-05 08:40:12
オリジナル
966 人が閲覧しました

How Can I Combine Class and Interface Constraints Using Java Generics?

クラスとインターフェイスの互換性を備えた Java ジェネリック

Java では、特定の制約を持つクラス オブジェクトを作成するのが困難な場合があります。一般的なシナリオは、特定のクラスを拡張すると同時に特定のインターフェイスを実装するクラス オブジェクトを定義することです。ただし、ジェネリックスを使用して両方の制約を同時に達成することは、共通の争点となっています。

次の構文を使用して、クラスに ClassA を拡張し、インターフェイス InterfaceB を実装するよう強制しようとします:

Class<? extends ClassA>
ログイン後にコピー

または

Class<? extends InterfaceB>
ログイン後にコピー

は 1 つの要件のみを満たし、結合できません

解決策

幸いなことに、Java ジェネリックスでは複数のインターフェイス、またはクラスとインターフェイスの組み合わせが可能です。これを実現するには、ワイルドカード宣言を次のように変更します。

<T extends ClassA & InterfaceB>
ログイン後にコピー

Sun のジェネリック チュートリアルで説明されているように、追加の必要なインターフェイスごとに & InterfaceName を追加することで、任意の複雑な組み合わせを実現できます。たとえば、Collections#max の JavaDoc 宣言は、この複雑さを示しています。

public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
ログイン後にコピー

バイナリ互換性を維持するには、これらの複雑な宣言が必要です。

クラスとインターフェイスの制約を使用した実装

変数宣言で必要な制限を実装するには、クラスのジェネリック境界:

class classB { }
interface interfaceC { }

public class MyClass<T extends classB & interfaceC> {
    Class<T> variable;
}
ログイン後にコピー

結論

Java ジェネリックは、制約のあるクラスとインターフェイスの組み合わせを作成する柔軟な方法を提供します。構文と制限を理解することで、開発者はこの機能を活用してコードに特定の要件を強制できます。

以上がJava ジェネリックを使用してクラスとインターフェイスの制約を組み合わせるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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