0

所以我试图缩短我的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 获取声明的字段(感谢此处的评论),但是根据get in的参数,我会遇到很多错误field.get()

为了让这个想法发挥作用,我需要从该字段中获取值。

我错过了什么吗?

4

2 回答 2

1

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

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

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

于 2013-09-18T17:17:52.717 回答
0

我让它按我的意愿工作。困扰我的是get争论。据我了解,参数应该是一个实例,我想获取该字段的值的同一对象类的任何实例。所以答案:

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

有了这个,我得到了我想要的东西。

于 2013-09-18T03:47:08.523 回答