변성
무공변
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>로 선언한다.
이 문서를 인용한 문서