我正在处理宏注释,我有类似的东西:
def findClass(className: String) : ClassSymbol = {
val tree = c.typecheck(c.parse(s"??? : ${className}"));
return tree.tpe.typeSymbol.asClass;
}
问题是当className
类似于List
时,它显然会抱怨,因为它需要参数。如果是List[String]
,则没关系。
说实话,我不完全理解为什么,例如,考虑到List中的泛型类型是不变的,classOf[List]
不被接受?执行classOf[List[String]]
和classOf[List[Integer]]
会返回相同的类。
因此,假设我的方法findClass
将始终收到没有参数或不变参数的类,我该怎样检查ValDef
?
答案 0 :(得分:0)
为什么,例如,考虑到List中的泛型类型是不变的,不接受classOf [List]
因为写这个的正确方法是classOf[List[_]]
,以便与其他用法保持一致。参数的方差并不重要(尽管List
是协变的,而不是不变的。)
这很难看,而且我可能没有想到更好的解决方案,但您可以尝试使用s"??? : ${className}"
进行类型检查,然后s"??? : ${className}[_]"
等等。