>Java >java지도 시간 >공분산, 불변성, 반공변성은 프로그래밍의 유형 관계에 어떤 영향을 미칩니까?

공분산, 불변성, 반공변성은 프로그래밍의 유형 관계에 어떤 영향을 미칩니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-12 03:28:01342검색

How do Covariance, Invariance, and Contravariance Affect Type Relationships in Programming?

일반 영어의 공분산, 불변성, 반공변성: 종합적인 설명

공분산, 불변성, 반공변성은 다음과 같은 프로그래밍 개념입니다. 유형과 하위 유형 간의 관계는 유형 변환의 영향을 받습니다. 이러한 개념은 프로그래밍 언어의 다형성과 유형 안전성을 이해하는 데 중요한 역할을 합니다.

공분산

공분산은 하위 유형 관계가 유형 변환에 의해 유지된다는 것을 나타냅니다. 즉, 유형 A가 유형 B의 하위 유형인 경우 변환된 유형 f(A)도 f(B)의 하위 유형입니다. 예를 들어 f(A) = List 변환을 생각해 보세요. 여기서 List는 다음과 같이 선언됩니다.

class List<T> { ... }

Since List 는 List의 하위 유형이므로 f(String) = List; f(Object) = List의 하위 유형입니다. 따라서 f는 공변적입니다.

반공변성

반공변성은 공분산의 반대입니다. 이는 유형 변환에 의해 하위 유형 관계가 역전됨을 나타냅니다. A가 B의 하위 유형이면 f(B)는 f(A)의 하위 유형입니다. 예를 들어 f(A) = A[] 변환을 생각해 보세요. 변환은 배열 간의 하위 유형 관계를 반대로 바꿉니다. Object[]는 String[]의 하위 유형이지만 String[]은 Object[]의 하위 유형이 아닙니다. 이는 f를 반공변성으로 만듭니다.

불변성

불변성은 공분산도 반공변성도 성립하지 않을 때 발생합니다. 즉, 하위 유형 관계는 유형 변환에 의해 보존되거나 역전되지 않습니다. 예를 들어, f(A) = Map 변환을 고려해보세요. A가 B의 하위 유형인 경우 f(A) = Map f(B) = Map의 하위 유형입니다. 따라서 f는 불변입니다.

언어 특성의 응용

  • 할당: Java의 객체 유형은 변하지 않습니다. 따라서 할당문 ArrayList strings = new ArrayList(); 유효하지 않지만 Object[] 개체 = new String[1]; 유효합니다.
  • 메소드 호출: 메소드 호출은 유형 검사를 위해 하위 유형 관계에 의존합니다. method(ArrayList list) 메소드는 new ArrayList() 인수를 사용하여 호출할 수 있지만 new ArrayList()는 호출할 수 없습니다.
  • 메소드 재정의: 재정의하는 경우 메서드의 경우 매개변수 유형은 공변 또는 불변이어야 하고, 반환 유형은 공변 또는 불변이어야 합니다. 불변. 예를 들어 다음 코드는 반환 유형이 공변적이므로 유효합니다.
  • class List<T> { ... }

    다형성 연산의 동작을 이해하고 프로그래밍에서 유형 안전성을 보장하려면 공분산, 불변성, 반공변성을 이해하는 것이 필수적입니다.

    위 내용은 공분산, 불변성, 반공변성은 프로그래밍의 유형 관계에 어떤 영향을 미칩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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