我正在学习scala,但无法知道如何做到这一点:
我在scala对象和google appengine实体之间进行映射,所以如果我有这样的类:
class Student {
var id:Long
var name:String
}
Run Code Online (Sandbox Code Playgroud)
我需要创建该类的一个实例,在java中我会得到它的名字然后然后做,field.set(object, value)但我找不到如何在scala中这样做.
我不能使用java反射,因为Student的字段被视为私有,而field.set因此而抛出错误.
谢谢
Wal*_*ang 41
Scala将"var"变成私有字段,一个getter和一个setter.因此,为了通过使用String识别它来获取/设置var,您需要使用Java反射来查找getter/setter方法.以下是执行此操作的代码段.请注意,此代码在Scala 2.8.0下运行,并且不存在重复方法名称和错误的处理.
class Student {
var id: Long = _
var name: String = _
}
implicit def reflector(ref: AnyRef) = new {
def getV(name: String): Any = ref.getClass.getMethods.find(_.getName == name).get.invoke(ref)
def setV(name: String, value: Any): Unit = ref.getClass.getMethods.find(_.getName == name + "_$eq").get.invoke(ref, value.asInstanceOf[AnyRef])
}
val s = new Student
s.setV("name", "Walter")
println(s.getV("name")) // prints "Walter"
s.setV("id", 1234)
println(s.getV("id")) // prints "1234"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8895 次 |
| 最近记录: |