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

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

DDD
DDDオリジナル
2024-12-05 08:40:12988ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。