我使用org.reflections
扫描项目中的包并获取所有扩展某个特征的类,如下所示:
val reflections = new Reflections("classpath")<br>
val classSet = reflections.getSubTypesOf(classOf[Validation])
我最终得到util.Set[Class[_ : Validation]]
如果我classSet.toSet.map(x => x.getName -> x).toMap
使用JavaConversions
,我会收到'缺少参数类型'错误。
如果我classSet.toSet.map(x => Map(x.getName -> x)).reduce(_ ++ _)
我收到相同的错误。
如果我将toSet
替换为toList
我会收到'类型不匹配'错误。
如果我classSet.toList.map(x => (x.getName, x)).toMap
,我会收到以下错误:
Cannot prove that (String, Class[?O]) forSome { type ?O <: com.common.Validation } <:< (T,U). not enough arguments for method toMap: (implicit ev: <:<[(String, Class[?0]) forSome { type ?0 <: com.common.Validation },(T,U)])scala.collection.immutable.Map[T,U]. Unspecified value parameter ev.
我想将此集转换为类名称的映射为键,反映的类作为值
注意 - 当我构建一个类似于var classMap = Map[String, Class[_ <: Validation]]()
的地图,然后通过遍历Set
将每个元素推入此地图时。我无法访问我从Trait
实现的类方法。
答案 0 :(得分:0)
在使用toSet
和toMap
次转化时明确指明类型的情况下有什么帮助:
import org.reflections.Reflections
import scala.collection.JavaConversions._
trait Validation
val reflections = new Reflections("classpath")
val javaClassSet = reflections.getSubTypesOf(classOf[Validation])
val scalaClassSet = javaClassSet.toSet[Class[_ <: Validation]]
scalaClassSet.map(x => x.getName -> x).toMap[String, Class[_ <: Validation]]