Scala:列出对象的所有变量的内容,而不知道对象的定义

时间:2017-06-14 09:36:30

标签: scala

我希望能够提取对象中声明的所有val的内容,但是我找不到这样做的方法。那么,它甚至可能吗?

例如: 我有一个像这样的对象:

object obj {
  val firstField = "I am the first field"
  val secondField = "I am the second field"
  val thirdField = "I am the third field"
}

我想最终得到这样的序列:

Seq("I am the first field", "I am the second field", "I am the third field")

以下是我的尝试:

obj.getClass.getDeclaredFields.map(field ⇒ field.get())

但是它返回一个错误,告诉我方法get()没有权限访问私有的最终版本,我找不到解决这个问题的方法。

1 个答案:

答案 0 :(得分:2)

粗略地说,scala中的“字段”被建模为方法。

在这种情况下你可以做obj.getClass.getMethods.map(_.invoke(obj))做你想做的事情(显然,除了合成的对象之外,你必须想到一些更精细的东西,你的对象有“真正的”方法建模领域)。

另外,我不得不说,你的问题得到了相当冷淡的接受的原因是它有点奇怪。我想不出一个很好的理由做这样的事情会很有用(特别是在一个人不知道怎么做的程度),而我的猜测也是人们对你的问题进行贬低也不能。

更有可能的是,您想到的解决方案对于您要解决的问题是错误的。您可能最好告诉我们真的想要做什么才能与您合作。