scala - > java getField()。get()

时间:2013-09-14 02:09:47

标签: java android scala reflection

所以我试图缩短我的android项目R调用,基本上是为了减少与R相关的代码。所以我想做类似的事情

object App extends Application {
  def string(field : String) : String = {
    this.getResources().getString(R.string.getClass().getField(field).get())}
  }

要更改App.getResources().getString(R.string.someAndroidValueString)App.string("someAndroidValueString")

是的,这不是很短,但从那里我可以创建一些特征,以便模型类只应定义一个方法 resourceName(),并且在任何地方都不会调用R(除了特征,我猜)

我可以从R.string.declaredField获取声明的字段(感谢此处的注释),但是根据field.get() get 的参数,我得到了许多错误。< / p>

为了让这个想法发挥作用,我需要从该领域获得价值。

我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

如果你的目标是严格减少样板,那么只需使用import。您不会丢失类型检查并冒险在字符串中输入拼写错误。

import App.getResources._
import R.string._
getString(someAndroidValueString)

不是100%肯定第一次导入是有效的,因为我不知道getResources是什么,但是尝试一下。

答案 1 :(得分:0)

我按照自己的意愿工作了。 困扰我的是 get 参数。据我了解,该参数应该是一个实例,同一个对象的类的任何实例我想得到该字段的值。 所以答案是:

this.getResources().getString(
    classOf[R.string].getDeclaredField(fieldName).getInt(classOf[R].newInstance()))

然后,我得到了我想要的东西。