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反射反映特征字段?
答案 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)