ホームページ >Java >&#&チュートリアル >Java ジェネリックでクラスとインターフェイスの境界を結合するにはどうすればよいですか?
Java ジェネリック: クラスとインターフェイスの境界の結合
Java では、ジェネリックは、さまざまなタイプのオブジェクトで動作できる型を定義する機能を提供します。 。特定のインターフェイスの実装中に、特定のクラスの拡張に制限されたクラス オブジェクトを作成する場合、一般的な課題が発生します。
クラスを作成するユースケースを考えてみましょう。 ClassA を拡張し、InterfaceB を実装するクラスを表すオブジェクト
最初は、次のワイルドカードを使用してみてください:
Class<? extends ClassA>
または
Class<? extends InterfaceB>
ただし、これらのいずれかを使用しても、両方の要件を同時に適用することはできません。
これを達成するための鍵は、ワイルドカードで複数の境界を使用することです。このようなワイルドカードの構文は次のとおりです。
<T extends Class & Interface>
これをシナリオに適用すると、次のようになります。
Class<? extends ClassA & InterfaceB>
Java ジェネリックで説明されているようにチュートリアルでは、複数の境界を使用して、型パラメーターが特定のクラスを拡張し、1 つ以上のインターフェイスを実装する必要があることを指定できます。 & 演算子を使用すると境界が区切られます。
このソリューションでは目標を達成できますが、複雑になる可能性があります。たとえば、Java の Collections#max メソッドについて考えてみましょう。このメソッドには次の宣言があります:
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
この高度な構文により、特定の型制約を強制しながらバイナリ互換性が保証されます。
ユースケースでは、必要な機能を備えたジェネリック クラスを作成できます。 bounds:
public class MyClass<T extends ClassA & InterfaceB> { Class<T> variable; }
このアプローチでは、次のような必要な制限を持つ変数を作成できます。
MyClass<ClassB>.variable
以上がJava ジェネリックでクラスとインターフェイスの境界を結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。