> Java > java지도 시간 > Java 함수 제네릭에 대한 호환성 규칙

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

王林
풀어 주다: 2024-04-26 18:03:01
원래의
636명이 탐색했습니다.

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를 대체할 수 있는 경우 <T> 유형은 다음과 호환됩니다. <S>. 예를 들어 <List<Cat>><List<Animal>>과 호환됩니다.
  • <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 实例。由于 Cat 扩展 Animal,因此 func1 可以兼容于 func2,从而可以接收 Cat공분산: 슈퍼클래스 유형 T가 하위 클래스 유형 S를 대체할 수 있는 경우 <S> 유형은 <T>와 호환됩니다. 예를 들어 <string></string><object></object>와 호환됩니다.

실제 예

다음 코드를 고려하세요.

rrreee

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

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿