爲了我的應用程序的目的,我需要能夠找到類型的字段列表(不是實例)以及運行時這些字段的類型。到目前爲止,我只能得到一個case類的方法列表,其中包含了使用classOf[MyCaseClass].getMethods
的getter,並且從簡單的類中沒有任何用處。我錯過了什麼嗎?有沒有用於這種用途的反射庫?那是如何正確完成的?Scala Class.getFields
回答
使用Scala的2.10反思:
scala> import reflect.runtime.{universe => ru}
import reflect.runtime.{universe=>ru}
scala> trait A { val field1: Int; val field2: Char; def meth1: Int }
defined trait A
scala> val fieldSymbols = ru.typeOf[A].members.collect{ case m: ru.MethodSymbol if m.isGetter => m }
fieldSymbols: Iterable[reflect.runtime.universe.MethodSymbol] = List(value field2, value field1)
返回的符號包含所有類型的信息,例如:
scala> fieldSymbols.map(_.typeSignature)
res16: Iterable[reflect.runtime.universe.Type] = List(=> scala.Char, => scala.Int)
好東西 - 你可能想在那裏添加一個答案! –
發表!任務完成了,現在我可以去睡覺了。 –
'collect {case m:ru.MethodSymbol if m.isGetter => m}''MethodSymbol'給出警告「抽象類型模式ru.MethodSymbol未被選中,因爲它被擦除」。目前還不確定如何消除它。 –
你可能想看看這個document on reflecting scala。 getMethods
是Java反射的一種方法。你在那裏找不到什麼?從Javadoc:
- String getName():以String形式返回由此Method對象表示的方法的名稱。
- Class [] getParameterTypes():返回一個Class對象數組,它以聲明順序表示由此Method對象表示的方法的形式參數類型。
- 類getReturnType():返回一個Class對象,該對象表示由此Method對象表示的方法的正式返回類型。
您可以閱讀更多關於Java reflection。
請注意,由於erasure,並非所有類型的信息在運行時都可用。
謝謝我對這個項目的瞭解,實際上已經下載了它們的lib,但由於它與我正在使用的2.9.1有太多的衝突,所以我無法編譯它。你不需要向我解釋Java反射。我在尋找的是在Scala中處理它的乾淨方式。我用反射的問題是Scala字段根本就沒有呈現,'getMethods'返回一堆生成的方法需要過濾掉,我希望有一個一致的算法。猜猜我必須分析* Mirrors *代碼。 –
看起來像你的問題是http://stackoverflow.com/questions/2204057/reflection-api-for-scala然後複製。 – schmmd
鏈接已死,更新的鏈接將不勝感激(我不知道要尋找什麼)。 –
- 1. Class.getFields()返回的字段順序
- 2. Scala中的Scala AST
- 3. scala-maven-plugin和Scala
- 4. Scala的:使用的Scala宏
- 5. scala/Serializable NoClassDefFoundError(RMI w/Scala)
- 6. sbt/scala-seed.g8和scala/scala-seed.g8有什麼區別?
- 7. Scala StringBuilder
- 8. Effective Scala
- 9. Scala HashMap:java.util.NoSuchElementException
- 10. Scala:[InputFormatException:null]
- 11. Scala RegexParsers
- 12. Scala中
- 13. Scala中
- 14. scala type'extraction'
- 15. Scala中
- 16. Scala List.updated
- 17. scala SocketServer
- 18. scala Stream.takeWhile
- 19. Scala將關機鉤添加到Scala swing
- 20. scala gson數組元素到scala ArrayList [Int]
- 21. Scala/Android項目中的「多個scala庫」
- 22. scala:從scala文件創建jar
- 23. 使用apache spark過濾JSON(Scala SQL) - Scala
- 24. Scala對象:作爲DAO的Scala對象
- 25. Scala宏的非scala源位置
- 26. Scala未在Intellij Scala插件上評估
- 27. Scala書籍的Scala遞歸解釋
- 28. 爲Scala IDE配置Scala調試器
- 29. Scala,Scala問題2.8.1在Maverick上安裝
- 30. scala-android插件
我很困惑 - 標題說字段,然後你去尋找方法。你要哪個? –
相關http://stackoverflow.com/q/7477248/97777 –
謝謝鄧肯,我會研究它。我去尋找方法來查找具有與其字段相對應的名稱和類型的屬性。 –