>  기사  >  Java  >  Java 함수 제네릭에 대한 호환성 규칙

Java 함수 제네릭에 대한 호환성 규칙

王林
王林원래의
2024-04-26 18:03:01616검색

Java 함수 제네릭의 호환성 규칙은 유형 안전성을 보장합니다. 규칙에는 동일 유형 매개변수 목록, 동일 유형 매개변수 범위, 반공변 및 공변 유형 매개변수가 포함됩니다. 예를 들어, 9e828ca004921c559f1a0411055a0190는 7e3f95175fc72649f7afad09c40191bd>과 호환되는 반면, f7e83be87db5cd2d9a8a0b8117b38cd4은 a87fdacec66f0909fc0757c19f2d2b1d

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를 대체할 수 있는 경우 8742468051c85b06f0a0af9e3e506b5c 유형은 다음과 호환됩니다. 1eefd63bbe027a2807ccada294a3372c. 예를 들어 c597ab4944e004cdb78db5763093769e><list>과 호환됩니다. </list>
  • 8742468051c85b06f0a0af9e3e506b5c 类型兼容于 1eefd63bbe027a2807ccada294a3372c。例如9e828ca004921c559f1a0411055a0190> 兼容于 7e3f95175fc72649f7afad09c40191bd>
  • 协变:如果超类类型 T 可以替代子类类型 S,则 1eefd63bbe027a2807ccada294a3372c 类型兼容于 8742468051c85b06f0a0af9e3e506b5c。例如f7e83be87db5cd2d9a8a0b8117b38cd4 兼容于 a87fdacec66f0909fc0757c19f2d2b1d

实战案例

考虑以下代码:

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

public void func2(Cat c) {
    // 代码...
}

func1 期望一个 Animal 或其子类的实例。func2 期望一个 Cat 实例。由于 Cat 扩展 Animal,因此 func1 可以兼容于 func2,从而可以接收 Cat공분산: 슈퍼클래스 유형 T가 하위 클래스 유형 S를 대체할 수 있는 경우 1eefd63bbe027a2807ccada294a3372c 유형은 8742468051c85b06f0a0af9e3e506b5c와 호환됩니다. 예를 들어 <string></string><object></object>와 호환됩니다.

실제 예

다음 코드를 고려하세요.

rrreee

func1Animal 또는 해당 하위 클래스의 인스턴스를 기대합니다. func2에는 Cat 인스턴스가 필요합니다. CatAnimal을 확장하므로 func1func2와 호환되며 Cat 유형을 받을 수 있습니다. 매개변수. 🎜🎜🎜결론🎜🎜🎜컴파일 시간 오류를 방지하고 유형 안전성을 보장하려면 함수 제네릭에 대한 호환성 규칙을 따르는 것이 중요합니다. 🎜

위 내용은 Java 함수 제네릭에 대한 호환성 규칙의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.