1

我正在做一个宏注释,我有这样的东西:

def findClass(className: String) : ClassSymbol = {
  val tree = c.typecheck(c.parse(s"??? : ${className}"));
  return tree.tpe.typeSymbol.asClass;
}

问题是 whenclassName是类似的东西List,它显然会抱怨,因为它需要参数。如果是List[String],那很好。

老实说,我不完全理解为什么,例如,classOf[List]考虑到 List 中的泛型类型是不变的,为什么不被接受?执行classOf[List[String]]and classOf[List[Integer]],返回相同的类。

因此,假设我的方法findClass将始终接收一个没有参数或具有不变参数的类,我该如何对ValDef?

4

1 回答 1

0

例如,考虑到 List 中的泛型类型是不变的,为什么不接受 classOf[List]

因为正确的写法是classOf[List[_]],为了与其他用法保持一致。参数的方差无关紧要(尽管List是协变的,而不是不变的)。

这很难看,而且我可能没有想到更好的解决方案,但是您可以尝试 typechecking s"??? : ${className}", thens"??? : ${className}[_]"等。

于 2016-06-19T07:39:51.387 回答