Java 関数ジェネリックの互換性ルールにより、型の安全性が保証されます。ルールには、同じ型パラメータのリスト、同じ型パラメータの範囲、反変型および共変型パラメータが含まれます。たとえば、<List<Animal>>(反変)は互換性があり、<String>は<Object>と互換性があります。
Java 関数ジェネリックの互換性ルール
Java ジェネリック関数を使用すると、タイプセーフな方法でコードを作成できますが、そうではありません。正しい互換性ルールに従わないと、コンパイル時エラーが発生する可能性があります。そういったトラブルを避けるためのルールを整理してみましょう。
ルール 1: 型パラメータ リストは同じである
同じパラメータ リストを持つ関数型のみが互換性があります。そのため、次の例ではエラーが発生します。
public <T> void func1(T v) {} public <U> void func2(U v) {}
ルール 2: 型パラメーターは同じ境界を持つ
境界は、ジェネリック型の許可される値を定義します。関数が同じ型のパラメーターに対して異なる境界を持つ場合、関数には互換性がありません。例:
public <T extends Comparable<T>> void func1(T v) {} public <T extends Number> void func2(T v) {}
ルール 3: 反変および共変の型パラメーター
< ;T>
は <S>
と型互換性があります。たとえば、<List<Cat>>
は、<List<Animal>>
と互換性があります。 <S>
型は <T>
と互換性があります。たとえば、<String>
は <Object>
と互換性があります。 実際的なケース
次のコードを考えてみましょう:
public <T extends Animal> void func1(T t) { // 代码... } public void func2(Cat c) { // 代码... }
func1
Animal## が必要です# またはそのサブクラスのインスタンス。
func2
Cat インスタンスが必要です。
Cat は
Animal を拡張するため、
func1 は
func2 と互換性があり、
Cat 型パラメータを受け取ることができます。
コンパイル時のエラーを回避し、型の安全性を確保するには、関数ジェネリックの互換性ルールに従うことが重要です。
以上がJava 関数ジェネリックの互換性ルールの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。