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>>
과 호환됩니다. <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
공분산: 슈퍼클래스 유형 T가 하위 클래스 유형 S를 대체할 수 있는 경우 <S>
유형은 <T>
와 호환됩니다. 예를 들어 <string></string>
은 <object></object>
와 호환됩니다.
실제 예
다음 코드를 고려하세요.rrreee
func1
는 Animal
또는 해당 하위 클래스의 인스턴스를 기대합니다. func2
에는 Cat
인스턴스가 필요합니다. Cat
는 Animal
을 확장하므로 func1
은 func2
와 호환되며 Cat
유형을 받을 수 있습니다. 매개변수. 🎜🎜🎜결론🎜🎜🎜컴파일 시간 오류를 방지하고 유형 안전성을 보장하려면 함수 제네릭에 대한 호환성 규칙을 따르는 것이 중요합니다. 🎜위 내용은 Java 함수 제네릭에 대한 호환성 규칙의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!