クラスとインターフェイスの互換性を備えた 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 サイトの他の関連記事を参照してください。