2011-11-07 67 views
1

我試圖使用scala.reflect來獲取類屬性並將它們寫入XML。 但是我得到一個奇怪的錯誤scala反射錯誤java

def toXml(): xml.Elem = { 
<node>{ 
    for(field: scala.reflect.Field <- getClass().getDeclaredFields()) { 
    val tmpString = "<" + field.name + ">" + this.getClass().getMethods.find(_.getName == field.name).get.invoke(this) + "</" + field.name + ">" 
    print(tmpString) 
    } 
}</node> 
} 

錯誤:

error: type mismatch; 
found : scala.reflect.Field => Unit 
required: java.lang.reflect.Field => ? 
for(field: scala.reflect.Field <- getClass().getDeclaredFields()) { 

所以,即使我明確地使用scala.reflect.Field,它仍然被視爲java.lang.reflect.Field中?

回答

7

getClass().getDeclaredFields()返回java.lang.reflect.Field對象。除非你找到了在這兩個類之間進行轉換的方法,否則你不能將它們聲明爲scala.reflect.Field,並期望它們能夠工作。

編輯:修復您的代碼:

for(field: java.lang.reflect.Field <- getClass().getDeclaredFields()) { 
+0

有沒有什麼辦法讓斯卡拉類的字段列表? – user485659

+0

@ user485659,請參閱編輯。請記住,在很多情況下,您甚至不需要聲明該類型,因爲它會被推斷出來。 – Geo

+0

謝謝,但是我現在面臨着另一個問題,我試圖獲得引用自定義類的屬性類型,我只知道它是類型對象 我的代碼: { for(字段:java.lang.reflect.Field < - getClass()。getDeclaredFields()) yield {this.getClass ().getMethods.find(_。getName == field.getName())。get.invoke(this)} } user485659