【发布时间】:2013-05-28 11:58:06
【问题描述】:
在我不使用 Universe.typeOf[T] 获取成员,而是从 xml 文件中读取类名的情况下,如何通过 scala 反射 api 调用 setter 方法。
我添加了示例。
class Person
class Student(val name: String, val parent: Person){
var node: String = _
}
<beans>
<bean id="person" class="com.test.Person"/>
<bean id="student" class="com.test.Student">
<constructor signature="this(String,Person)">
<arg value="Test name"/>
<arg ref-val="person"/>
</constructor>
<property name="note" ref-val="Some note"/>
</bean>
</beans>
这就是我获取字段的方式
val classMirror = ru.runtimeMirror(getClass().getClassLoader())
.classSymbol(Class.forName(className))
classMirror.asType.toType.members.filter {
item =>
!item.isMethod && item.isTerm
}
然后我从外地得到二传手
field.asMethod.setter
如果可能的话,我不知道如何调用 setter 的应用。我也不确定我是否以正确的方式获得了身份。
【问题讨论】:
-
只是为了理解你:你有一个带有 setter 方法的类。您不知道类名,但可以在 XML 文件 (?) 中找到该类名。你想获取类并调用 setter-method?
-
您是否正在寻找该类的现有实例?因为您提到的是“二传手”。还是我们在这里谈论构造函数? :)
-
我已编辑问题。是的,我想创建该类的对象并填充它。是的,还有 setter(scala setter) 和构造函数。你关于构造函数的问题给了我一个想法,也许可以尝试从实例而不是类中获取字段。
-
是的,如果我先创建实例然后反映它,我可以让事情正常进行。
标签: scala reflection