我用org.reflections
掃描包在我的項目,並得到擴展某些性狀,像這樣所有類的集合:
的Java Scala的類型轉換 - 反映類
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
實施的班級方法。
謝謝!奇蹟般有效。我不知道你可以用這種方式顯式指定類型。 – Killyz