所以我试图缩短我的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>
为了让这个想法发挥作用,我需要从该领域获得价值。
我错过了什么吗?
答案 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()))
然后,我得到了我想要的东西。