这样的代码有什么问题吗?
public class SomeClass extends View {
private final float someFieldVariable = getResources().getDimension(R.dimen.someVariableValue);
....
}
最佳答案
我认为这是危险的代码。
上下文在调用 super
构造函数时连接。 someFieldVariable
的初始化取决于上下文,可能在调用 super
之前完成。
因此,有可能由于编译器不够智能而导致上下文未连接,然后您的初始化将因未捕获的异常而失败。这将导致您的应用程序崩溃。
即使它有效,我认为依赖编译器如何工作也是一种不好的风格。
您应该在构造函数中对其进行初始化,以确保之前已调用 super
-connstructor 或仅在需要时从资源中获取值。
我也认为定义一个局部变量来保存资源值并没有太大的优势。这就像定义一个变量来保存另一个变量,这个变量甚至是 final。如果您经常需要该值并且每个处理器周期都很重要,那么这是合理的。
关于android - 在 android 上的声明中从资源设置字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19700467/