在android上声明的资源设置字段

时间:2013-10-31 07:20:03

标签: android

这样的代码有问题吗?

public class SomeClass extends View {

    private final float someFieldVariable = getResources().getDimension(R.dimen.someVariableValue);

    ....

}

1 个答案:

答案 0 :(得分:1)

我认为这是危险的代码。

上下文连接了super的时间 - 调用构造函数。 someFieldVariable的初始化取决于上下文,可能在调用super之前完成。

因此,由于编译器不够智能,因此上下文有可能没有连线,然后您的初始化将因未捕获的exeption而失败。这会导致您的应用崩溃。

即使它有效,我认为依靠编译器的工作方式也是不好的方式。 您应该在构造函数中初始化它,以确保之前已调用super - connstructor,或者只是根据需要从资源中获取值。

我还认为定义一个用于保存资源值的局部变量没有什么大的优势。这就像定义一个变量来保存另一个变量,甚至是最终变量。如果你经常需要这个值并且每个处理器周期都很重要,这是合理的。