객체 지향 프로그래밍에서 Generics는 유형 안전성과 코드 재사용성을 향상시키는 데 중요한 역할을 합니다. Java 제네릭에서는 그리고
Hamcrest 매처와 함께 JUnit을 사용하는 다음 예를 고려하세요.
Map<String, Class<? extends Serializable>> expected = null; Map<String, Class<java.util.Date>> result = null; assertThat(result, is(expected));
이 코드는 AssertThat 메소드 서명의 일반 유형 매개변수와 실제 유형 간의 불일치 참여했습니다.
문제가 해결되었으면 공분산의 개념을 살펴보겠습니다. Java에서 배열은 공변적입니다. 즉, T 유형이 S의 하위 유형이면 해당 배열 T[] 및 S[]도 하위 유형입니다.
주어진 예에서 예상되는 맵은 직렬화 가능의 하위 클래스를 나타내는 Class 객체의 인스턴스. 반면에 결과 맵은 Date 클래스를 나타내는 Class 객체만 보유할 수 있습니다. 를 확장하면, AssertThat 메소드는 값이 Date 클래스를 포함하여 직렬화 가능을 확장하는 클래스의 인스턴스인지 확인하는 매처를 허용할 수 있습니다.
assertThat JUnit의 메소드는 결과 유형에 대해 적절한 일치자가 전달되도록 보장하기 위해 일반적입니다. 일반적으로
assert를 전환하는 동안 Matcher 컴파일 문제를 해결하지만 잠재적인 단점이 발생합니다. 이렇게 확장된 매개변수 목록은 T를 확장하는 유형에서 작동하는 모든 일치자를 허용하므로 특정 시나리오에서 잘못된 일치 논리가 발생할 수 있습니다.
T> 그리고
위 내용은 ``와 ``의 차이점은 무엇인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!