내가 가지고있는 유형 매개 변수 및 유형 구성원을 포함하는 중첩 된 구조 다음는 유형 매개 변수 및 유형의 회원들로부터 유형의 정보를 수집
trait B
trait B1 extends B
trait U {
type _B <: B
}
type U1 = U {
type _B = B1
}
class Q[_U <: U] {
override def toString() : String = {
// print out type information on B here...
}
}
def test() {
val q = new Q[U1]()
println(q.toString())
}
그것은 방식 때문에 U1의 런타임에 B에 대한 형식 정보를 수집 나에게없는 것 이 지정됩니다.
내가 틀렸어? 그렇지 않은 경우, 설정에 사소한 변경 사항이있는 솔루션이 있습니까? Kipton 바로스의 대답
덕분에 내가 다음 설치를 내놓았다 :이 방법의 유일한 단점은 U.
의 인스턴스에 대한 필요성이trait B
trait B1 extends B
trait B2 extends B
trait U {
type _B <: B
implicit val mfB : Manifest[_B]
}
class U1 extends U {
type _B = B1
val mfB : Manifest[_B] = implicitly
}
class U2 extends U {
type _B = B2
val mfB : Manifest[_B] = implicitly
}
class Q[_U <: U](u : _U) {
override def toString() : String = {
"B: " + u.mfB.erasure.getName()
}
}
def test() {
println(new Q(new U1) toString)
println(new Q(new U2) toString)
}
감사합니다. 귀하의 요점을 명확히하기 위해 답변을 업데이트했습니다. 내 예제에서 case (4)가 Nothing을 인쇄하는 이유에 대해 생각해 보셨습니까? 호출 사이트의 타입 유추가 타입 파라미터'B'를'B1'로 결정했기 때문에 놀랍습니다. 맞습니까? –