1

这样的代码有问题吗?

public class SomeClass extends View {

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

    ....

}
4

1 回答 1

1

我认为这是危险的代码。

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

因此,由于编译器不够智能,因此有可能没有连接上下文,然后您的初始化将失败并出现未捕获的异常。这将导致您的应用程序崩溃。

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

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

于 2013-10-31T07:55:50.920 回答