변성
무공변
fun invariant(value: Box<Canine> {}
invariant(animalBox)
invariant(canineBox)
invariant(dogBox)
- 타입
S
가 T
의 하위 타입일 때 Box[S]
와 Box[T]
사이에 상속 관계가 없는 경우.
- 위 코드에서
animalBox
, canineBox
, dogBox
사이에는 상속 관계가 없다.
- 상속 관계가 없으므로
Box<Animal>
을 매개변수로 받는 함수는 Box<Canine>
, Box<Dog>
타입을 입력받을 수 없다.
- 이때
Box<Animal>
의 변성은 무공변이 된다.
공변
fun covariant(value: Box<out Canine> {}
covariant(animalBox)
covariant(canineBox)
covariant(dogBox)
- 타입
S
가 T
의 하위 타입일 때 Box[S]
가 Box[T]
의 하위 타입인 경우.
- 코틀린에서는 공변 타입 매개변수를
<out T>
로 선언한다.
반공변
fun contravariant(value: Box<in Canine>) {}
contravariant(animalBox)
contravariant(canineBox)
contravariant(dogBox)
- 타입
S
가 T
의 하위 타입일 때 Box[S]
가 Box[T]
의 상위 타입인 경우.
- 코틀린에서는 반공변 타입 매개변수를
<in T>
로 선언한다.
이 문서를 인용한 문서