无法在构造函数中初始化静态最终字段
Can't initialize static final field in constructor
为什么我不允许在以下情况下分配最终修饰符:
public static final float aspectRatio;
public TestBaseClass() {
// TODO Auto-generated constructor stub
screenWidth = Gdx.graphics.getWidth();
screenHeight = Gdx.graphics.getHeight();
aspectRatio = screenWidth/screenHeight;
}
我想当我将一个变量声明为 final 并将其留空(未初始化)时,我需要在构造函数中添加一个值,因为它是第一个被调用的,并且每个 class 都有一个。
但是我从 eclipse 中收到一条错误消息:The final field TestBaseClass.aspectRatio cannot be assigned
。
为什么?
aspectRatio
是 static
,但您正试图在构造函数中初始化它,每次新的 实例 都会在其中设置它创建。根据定义,这不是最终的。尝试使用静态初始化块。
public static final float aspectRatio;
static {
screenWidth = Gdx.graphics.getWidth();
screenHeight = Gdx.graphics.getHeight();
aspectRatio = screenWidth/screenHeight;
}
public TestBaseClass() {
// Any instance-based values can be initialized here.
}
为什么我不允许在以下情况下分配最终修饰符:
public static final float aspectRatio;
public TestBaseClass() {
// TODO Auto-generated constructor stub
screenWidth = Gdx.graphics.getWidth();
screenHeight = Gdx.graphics.getHeight();
aspectRatio = screenWidth/screenHeight;
}
我想当我将一个变量声明为 final 并将其留空(未初始化)时,我需要在构造函数中添加一个值,因为它是第一个被调用的,并且每个 class 都有一个。
但是我从 eclipse 中收到一条错误消息:The final field TestBaseClass.aspectRatio cannot be assigned
。
为什么?
aspectRatio
是 static
,但您正试图在构造函数中初始化它,每次新的 实例 都会在其中设置它创建。根据定义,这不是最终的。尝试使用静态初始化块。
public static final float aspectRatio;
static {
screenWidth = Gdx.graphics.getWidth();
screenHeight = Gdx.graphics.getHeight();
aspectRatio = screenWidth/screenHeight;
}
public TestBaseClass() {
// Any instance-based values can be initialized here.
}