РЕДАКТИРОВАТЬ: пересмотренный вопрос: следует использовать scala.reflect.Field или java.lang.reflect.Field?
Ответ: Всегда [*] используйте java.lang.reflect.Field и, в общем, отражение java по двум причинам:
- Вот что возвращает xxx.getClass (). GetDeclaredFields ()
- Следующий комментарий находится рядом с определением scala.reflect.Field
.
/** This type is required by the compiler and <b>should not be used in client code</b>. */
case class Field(override val fullname: String, tpe: Type) extends GlobalSymbol(fullname)
[*] По крайней мере, на данный момент. скоро прибудет отражение в Скале.
-
Оригинальный ответ:
Было бы полезно, если бы вы также опубликовали код класса, но кажется, что поле объявлено как Object. getType возвращает класс объявления поля.
С Поле # getType () :
Возвращает объект Class, который идентифицирует объявленный тип для поля
представленный этим полевым объектом.
class Foo {
var bar: String = "string"
var bar2: java.lang.Object = "string"
}
for (field <- new Foo().getClass.getDeclaredFields()) {
println("field=" + field.getName() + " " + field.getType.toString())
}
дает
field=bar class java.lang.String
field=bar2 class java.lang.Object
Если вы хотите указать тип экземпляра, то вам нужно выполнить .getClass () для экземпляра обычным способом.