构造函数结果类型不是<:<具有类型参数的类的类类型

时间:2014-06-03 14:17:10

标签: scala reflection

根据<:<,如果类具有类型参数,则类的构造函数的结果类型不是类的结果类型。这是一个小程序来演示:

// 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?如果是这样,这些方法的参数属于什么?我没有找到很多关于它们的文档。

1 个答案:

答案 0 :(得分:0)

使用typeSignatureIn而不仅仅是typeSignature,以获取说明符号所有者的精确类型的类型信息。