首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Scala:从字段名反射地设置字段值

Scala:从字段名反射地设置字段值
EN

Stack Overflow用户
提问于 2009-10-20 00:05:26
回答 1查看 10.2K关注 0票数 19

我正在学习scala,但不知道该怎么做:

我在scala对象和google appengine实体之间做一个映射器,所以如果我有一个这样的类:

class Student {
    var id:Long
    var name:String
}

我需要创建一个该类的实例,在java中,我会通过它的名称获取字段,然后执行field.set(object, value),但我不知道如何在scala中做到这一点。

我不能使用java反射,因为学生的字段被视为私有的,因此field.set会抛出一个错误。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-19 17:07:55

Scala将"var“转换为一个私有字段,一个getter和一个setter。因此,为了通过字符串识别来获取/设置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"
票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1589603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档