2011-11-07 12 views
1

私はscala.reflectを使用してクラス属性を取得し、XMLを記述しようとしています。 しかし、私はscala reflection error 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オブジェクトを返します。これらの2つのクラスを変換する方法が見つからない限り、それらをscala.reflect.Fieldと宣言して動作させることはできません。

EDIT:あなたのコードのための修正:

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

は、Scalaでは、クラスのフィールドのリストを取得する方法はありますか? – user485659

+0

@ user485659、編集を参照してください。多くの場合、型を宣言する必要はなく、推論されるので注意してください。 – Geo

+0

ありがとう、私は今ここで別の問題に直面している、私は、カスタムクラスを参照する属性の型を取得しようとしている、私はちょうどそれがObject型のそれを得る { フィールド:java.lang.reflect.Field < - getClass()。getDeclaredFields()) yield {this.getClass ().getMethods.find(_。getName == field.getName())。get.invoke(this)} } user485659