는 4.5 차이 주석 :
분산 주석 파라미터 유형의 인스턴스에 대하여 하위 유형으로 어떻게 변하는지를 나타낸다 (§3.5.2). '+'분산은 공변 (covariant) 의존성을 나타내며, '-' 분산은 반동적 종속성을 나타내고, 누락 분산은 은 불변의 종속성을 나타냅니다. 분산 주석은 주석 매개 변수가 형식 매개 변수를 바인딩하는 형식 또는 클래스에 으로 나타나는 방식을 제한합니다. 유형 정의 유형 T [tps] = S 또는 유형 선언 유형 T [tps]> : L < : U 유형 매개 변수 + '는 공 변하는 위치에만 나타나야하고 '- ' 반공 위치에 나타난다.
따라서 유형 매개 변수는 기본적으로 불변으로 간주됩니다. 이것을 원한다면 형식 매개 변수에 공동 또는 반의어로 명시 적으로 주석을 달아야합니다 ( ). 또한 전혀 사용되지 않는 유형 매개 변수에 분산 주석을 사용하는 것이 합법적입니다 (유용하지는 않지만). 예 는 :
scala> class A[+T, -S] {def myMethod(s: String) = println(s)}
defined class A
scala> class A2[T] {def myMethod(t: T) = println(t)}
defined class A2
scala> class A3[-T] {def myMethod(t: T) = println(t)}
defined class A3
scala> val a1 = new A2[Any]
a1: A2[Any] = [email protected]
scala> val a2: A2[Int] = a1
:6: error: type mismatch;
found : A2[Any]
required: A2[Int]
val a2: A2[Int] = new A2[Any]
scala> val a3 = new A3[Any]
a3: A3[Any] = [email protected]
scala> val a4: A3[Int] = a3
a5: A3[Int] = [email protected]
예에서 contravariant 인 클래스 A3에 분산 주석, A3 [없음] 인스턴스 A4로부터 할당을 A3 [지능, 의 서브 타입 인 것으로 간주된다 만든다 ~ 3 법적. 분산 주석을 사용하지 않으면 실패합니다.
답변 해 주셔서 감사합니다. 유스 케이스와 베스트 프랙티스에 대해 묻고 있다는 점을 분명히하지 못했습니다. 나는 지금 질문을 편집했다. – Michael
좋아, 그 말이 맞는, 그리고 지금 내 대답은 더 이상 의미가되지 않습니다,하지만 어쨌든 개선하기 위해 다른 사람들을 위해 그것을 떠날거야. –