在android上声明时设置参考资料中的字段

在android上声明时设置参考资料中的字段,android,Android,这样的代码有什么问题吗 public class SomeClass extends View { private final float someFieldVariable = getResources().getDimension(R.dimen.someVariableValue); .... } 我认为这是危险的代码 当调用super构造函数时,上下文就会连接起来。someFieldVariable的初始化取决于上下文,可能在调用super之前完成 因此,由于编译

这样的代码有什么问题吗

public class SomeClass extends View {

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

    ....

}

我认为这是危险的代码

当调用
super
构造函数时,上下文就会连接起来。
someFieldVariable
的初始化取决于上下文,可能在调用
super
之前完成

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

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


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

我认为这是危险的代码

当调用
super
构造函数时,上下文就会连接起来。
someFieldVariable
的初始化取决于上下文,可能在调用
super
之前完成

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

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


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

是为了能够访问该类所需的基本上下文资源是的,我忘了键入extends View。然后应该正常工作是为了能够访问该类所需的基本上下文资源是的,我忘了键入extends View。然后应该可以正常工作了。好的,谢谢,我想我会把初始化移到构造函数中。好的,谢谢,我想我会把初始化移到构造函数中。