如何反映scala trait类字段,使用getDeclaredFields却什么都没得到?

时间:2013-11-29 07:57:56

标签: scala reflection traits

var cl: URLClassLoader = _
var out: TaskStreams = _
var clazz = cl.loadClass("io.marsdigtal.XXX.UserTrait")

if (clazz.isInterface) {
  clazz = cl.loadClass(className + "$class")
  clazz.getDeclaredFields.foreach { each =>
  out.log.info("fieldName: " + each.getName)
  }
}

所以我使用了getDeclaredFields,却什么也没得到...... 如何通过scala或java反射反映特征字段?

1 个答案:

答案 0 :(得分:0)

这并没有具体解决您的问题,但如果有人想获得已知特征的字段列表:

new SomeTrait{...}.getClass.getDeclaredFields

我将其用于list fields in a trait hierarchy in dependency / declared order

[编辑]有一个警告。这些字段不能用于“获取”。在调用'get'之前获取有问题的类实例上的真实字段:

val real = cls.getDeclaredField(f.getName)
real.setAccessible(true)
real.get(someInst)