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