Java 関数ジェネリックの互換性ルール

王林
リリース: 2024-04-26 18:03:01
オリジナル
625 人が閲覧しました

Java 関数ジェネリックの互換性ルールにより、型の安全性が保証されます。ルールには、同じ型パラメータのリスト、同じ型パラメータの範囲、反変型および共変型パラメータが含まれます。たとえば、<List<Animal>>(反変)は互換性があり、<String>は<Object>と互換性があります。

Java 函数泛型的兼容性规则

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 を置き換えることができる場合、&lt ;T><S> と型互換性があります。たとえば、<List<Cat>> は、<List<Animal>> と互換性があります。
  • 共分散: スーパークラス型 T がサブクラス型 S を置き換えることができる場合、<S> 型は <T> と互換性があります。たとえば、<String><Object> と互換性があります。

実際的なケース

次のコードを考えてみましょう:

public <T extends Animal> void func1(T t) {
    // 代码...
}

public void func2(Cat c) {
    // 代码...
}
ログイン後にコピー

func1 Animal## が必要です# またはそのサブクラスのインスタンス。 func2 Cat インスタンスが必要です。 CatAnimal を拡張するため、func1func2 と互換性があり、Cat 型パラメータを受け取ることができます。

#結論

コンパイル時のエラーを回避し、型の安全性を確保するには、関数ジェネリックの互換性ルールに従うことが重要です。

以上がJava 関数ジェネリックの互換性ルールの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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