根据<:<
,如果类具有类型参数,则类的构造函数的结果类型不是类的结果类型。这是一个小程序来演示:
// Scala 2.11.1
case class ClassWithTypeParam[A](x: Int)
def main(args: Array[String]) {
val classType = weakTypeOf[ClassWithTypeParam[String]]
val constructorType = classType.decl(termNames.CONSTRUCTOR).asMethod.typeSignature
val MethodType(constructorParams, resultType) = constructorType
println(s"$classType\n$constructorType\n$constructorParams\n$resultType\n")
println(resultType <:< classType) // should print "true"
}
这是输出:
ClassWithTypeParam[String]
(x: scala.Int)ClassWithTypeParam[A]
List(value x)
ClassWithTypeParam[A]
false
如果我拨打typeOf
而不是weakTypeOf
,它也会失败。当我在没有类型参数的类上尝试此操作时,最后一行是true
。
我是否需要致电.substituteTypes
或.typeSignatureIn
?如果是这样,这些方法的参数属于什么?我没有找到很多关于它们的文档。
答案 0 :(得分:0)
使用typeSignatureIn而不仅仅是typeSignature,以获取说明符号所有者的精确类型的类型信息。