>  기사  >  Java  >  자바의 변화

자바의 변화

WBOY
WBOY앞으로
2023-09-01 13:05:061042검색

자바의 변화

Java는 강력한 객체 지향 프로그래밍 기능을 통해 프로그래머에게 유연하고 효율적인 코드를 개발할 수 있는 다양한 메커니즘을 제공합니다. 종종 간과되지만 중요한 개념 중 하나는 분산입니다. 특히 제네릭과 컬렉션을 사용할 때 Java를 마스터하려면 가변성을 이해하는 것이 중요합니다. 이 기사에서는 Java의 가변성을 심층적으로 살펴보고 해당 유형(공분산, 반공변성, 불변성)과 실제 애플리케이션을 다룹니다.

분산 이해

변형은 더 복잡한 유형의 하위 유형과 해당 구성 요소의 하위 유형 간의 관계를 나타냅니다. 간단히 말해서, 클래스가 유형 매개변수로 사용될 때 클래스의 유형 계층 구조가 유지되는 방식을 결정합니다. 변형은 제네릭을 처리할 때 특히 중요하며, 할당에 어느 정도 유연성을 허용하면서 형식 안전성을 보장하는 프레임워크를 제공합니다.

Variance는 세 가지 주요 유형으로 나눌 수 있습니다.

  • 공분산 - ClassB가 ClassA의 하위 클래스인 경우 Collection은 Collection의 하위 클래스로 간주될 수 있습니다.

  • Contravariance - ClassB가 ClassA의 하위 클래스인 경우 Collection은 Collection의 하위 클래스로 간주될 수 있습니다. p>

  • Invariance - Collection 및 Collection은 ClassA와 ClassB 간의 관계에 관계없이 하위 유형 관계가 없습니다.

각 개념을 더 자세히 살펴보겠습니다.

Java의 공분산

Java에서는 와일드카드와 확장 절을 사용하여 공분산을 달성합니다. 예를 들어 보겠습니다 -

으아아아

이 경우 Cat 개체 또는 그 인스턴스를 고양이에 추가할 수 있지만, Animal 또는 개체를 포함하여 Cat의 상위 유형이 포함될 수 있으므로 고양이에서 읽고 결과를 Cat로 처리할 수 없습니다. 따라서 고양이에게 쓸 수는 있지만 형식이 안전한 방식으로 읽을 수는 없습니다

Java의 불변성

불변성은 Java의 기본 동작이며 ClassA와 ClassB 간의 관계에 관계없이 Collection과 Collection 사이에 하위 유형 지정 관계가 없음을 의미합니다. 이는 제한적인 것처럼 보일 수 있지만 형식 안전성에 매우 중요합니다. Java에서 List는 List의 하위 유형이 아니지만 String은 Object의 하위 유형입니다. 이는 Java 컬렉션이 변경 가능하고 이 관계를 허용하면 런타임 유형 오류가 발생하기 때문입니다.

으아아아

위의 예에서 String은 Object의 하위 유형이지만 List는 List의 하위 유형이 아니므로 컴파일 오류가 발생합니다.

이 기능은 처음에는 제한 사항처럼 보일 수 있지만 안전하지 않은 작업이 수행되지 않도록 보장하는 Java 유형 시스템의 중요한 측면입니다. List가 List의 하위 유형인 경우 문자열이 아닌 객체가 List에 추가되어 런타임에 ClassCastException이 발생할 수 있습니다.

으아아아

이 예는 유형이 안전한 불변성을 유지하는 것이 왜 중요한지 보여줍니다.

제한된 유형 매개변수 및 분산

공분산과 반공분산은 제한된 유형 매개변수에 가장 일반적으로 사용됩니다. 제한된 유형 매개변수는 유형 매개변수가 특정 유형의 하위 유형(확장 키워드) 또는 상위 유형(수퍼 키워드)이어야 함을 나타내는 방법입니다. 이를 통해 유형 안전성을 유지하면서 메소드에 전달할 수 있는 유형을 유연하게 결정할 수 있습니다.

예를 들어, Number 목록과 모든 하위 클래스에 대해 작동하는 메서드가 있을 수 있습니다. -

으아아아

이 방법에서 T는 제한된 유형 매개변수이며 Number 또는 Number의 하위 유형이어야 합니다. 이를 통해 메서드가 List, List, List 등에서 작동하여 공분산

을 나타낼 수 있습니다.

결론

요약하자면, Java의 가변성을 이해하는 것은 제네릭과 컬렉션을 효과적으로 사용하는 데 중요합니다. 유형 안전성을 보장하면서 유연한 코드를 허용합니다.

extends 키워드를 사용하는 공분산을 통해 하위 클래스가 상위 클래스를 대체할 수 있으므로 보다 일반적인 객체 처리가 가능해집니다. 반면, 반공변성(Contravariance)을 사용하면 하위 클래스를 상위 클래스로 대체할 수 있으므로 보다 구체적인 개체에 대해 더 넓은 범위의 작업을 수행할 수 있습니다.

불변성은 다양한 유형의 컬렉션(상속을 통해 관련된 경우에도)이 고유성을 유지하고 런타임 유형 오류를 방지하도록 하여 유형 안전성을 유지합니다.

对象>字符串>

对象>字符串>

위 내용은 자바의 변화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제