Type dependency in Java, Part 2
Using covariance and contravariance in your Java programs
원문 : http://www.itworld.com/article/3197118/learn-java/type-dependency-in-java-part-2.html?page=3
일반 람다 식
그들의 방법과는 달리, 기능적 인터페이스는 일반적 일 수 있습니다. 이 Comparator예제에서는 일반적인 기능 인터페이스 인 것을 보았습니다. type 매개 변수는 다른 제네릭 유형과 마찬가지로 한정 될 수 있습니다. 다음과 같이 와일드 카드 참조를 선언 할 수도 있습니다.
그러나이 참조를 사용할 수있는 방법은 없습니다. 이 메서드를 호출하려는 모든 시도가 실패합니다.
와일드 카드와 호환되는 것은 없습니다. 전달하려는 매개 변수가 method()없습니다 Object. 불행히도 와일드 카드의 상한조차도 도움이되지 않습니다.
오류는 람다식이 매개 변수의 정확한 유형만을 취한다는 것을 보여줍니다. 유연성이 없습니다. 공분산은 없다.
하한은 묶여 method()있는 객체로 호출 될 수 있기 때문에 조금 더 유용합니다 .
그러나 경계의 상위 유형이 더 이상 작동하지 않습니다. 매개 변수는 람다 표현식 유형과 정확히 일치해야합니다. 이 경우, 그것은있을 것이며 ?, 그런 대상이 없다 ? super.
때문에 이러한 규칙, 우리는 일반적인 람다는 말할 수 불변 자신의 유형 매개 변수에 대한.
요약 : 람다 표현식 (메소드 호출과 마찬가지로)은 서명, 결과 유형 및 예외 사양에 대해 공변입니다. 일반 람다 유형 (기능 인터페이스)은 유형 매개 변수에 대해 변하지 않습니다.
결론
공분산 및 반항은 형식 종속 언어 요소의 호환성 또는 비 호환성을 나타냅니다. Java에서 배열 유형은 암시 적으로 공변수이며 명시 적으로 반 변형입니다 (유형 변환 또는 캐스팅을 통해). 매개 변수화 된 (generic) 유형은 내재적으로 불변하며 형식 변환에서는 변경되지 않습니다. 와일드 카드 바인딩을 통해 매개 변수화 된 유형에 대한 공분산 및 반항성을 선언 할 수 있지만 상한값 ( <? extends Bound>)과 하한값 ( ) 을 통한 공분산을 선언 <? super Bound>합니다. 와일드 카드 유형은 추상적이며 참조 용으로 만 사용할 수 있습니다.
메소드 호출은 서명 및 결과 유형에 관한 선언 및 정의와 공변합니다. 메소드 선언과 정의는 서명과 결과 유형에 관한 공변 (covariant)에 대해 서로 불변합니다.
표 3은 Java의 유형 종속성 및 분산에 대한이 논의를 요약합니다.
표 3. Java의 차이
불변량 | 공변량 | 반항적 인 | |
배열 유형 | 절대적인 | 노골적인 : 캐스팅 | |
일반 유형 | 절대적인 | 명백한: | 명백한: |
메소드 | 서명 | 결과 유형 | |
메소드 | 서명과 | ||
람다 | 유형 매개 변수 | 서명과 |
이 이야기 인 "Java의 유형 종속성, 제 2 부"는 원래 JavaWorld에서 출간 되었습니다.
'DevOps' 카테고리의 다른 글
| Java 101 : 필수 Java 언어 기능 둘러보기, 1 부-3장 assertions and generics (0) | 2017.06.14 |
|---|---|
| Java 101 : 필수 Java 언어 기능 둘러보기, 1 부-2장 assertions and generics (0) | 2017.06.14 |
| Java 101 : 필수 Java 언어 기능 둘러보기, 1 부-1장 assertions and generics (0) | 2017.06.14 |
| Java의 유형 종속성, 2-2 (Collections API, 제네릭, 람다식 활용) (0) | 2017.06.14 |
| Java의 유형 종속성, 2-1 (Collections API, 제네릭, 람다식 활용) (0) | 2017.06.14 |
| Java에서 유형 종속성, Part 1-2 (array, generic, wildcard) (0) | 2017.06.14 |
| Java에서 유형 종속성, Part 1-1 (array, generic, wildcard) (0) | 2017.06.14 |