下面的代码会产生编译器错误[self.tableView setDoubleAction:@selector(doubleClick:)];
//...
- (void)doubleClick:(id)sender
{
//set your cell to editable mode
}
(同样适用于Variable HEIGHT might not have been initialized
)。
如何声明未初始化的静态最终变量,就像我在下面尝试做的那样?
WIDTH
答案 0 :(得分:3)
static {
Image currentImage = null;
try {
currentImage = new Image("res/images/asteroid_blue.png");
} catch (Exception e) {
// catch exception - do other stuff
} finally {
if (currentImage != null) {
WIDTH = currentImage.getWidth();
HEIGHT = currentImage.getHeight();
} else {
// initialise default values
WIDTH = 0;
HEIGHT = 0;
}
}
}
无论发生什么(try / catch),你必须为静态变量赋值 - 因此,最后应该使用。
答案 1 :(得分:2)
正确的方法是将值设置为null
(如果是对象),但由于它是final
,您必须执行此回合:
public static final int HEIGHT, WIDTH;
static{
int w = 0, h = 0;
try {
currentImage = new Image("res/images/asteroid_blue.png");
w = currentImage.getWidth();
h = currentImage.getHeight();
}catch (SlickException e){
e.printStackTrace();
}
WIDTH = w;
HEIGHT = h;
}
答案 2 :(得分:0)
您可以执行此操作,但需要通过抛出异常退出静态块
public static final int HEIGHT, WIDTH;
static{
try {
currentImage = new Image("res/images/asteroid_blue.png");
WIDTH = currentImage.getWidth();
HEIGHT = currentImage.getHeight();
}catch (SlickException e){
e.printStackTrace();
throw new RuntimeException("Could not init class.", e);
}
}
答案 3 :(得分:-2)
你做不到。 final 变量只能在初始化期间分配值,因此您收到编译器错误的原因(变量将保持为null)。它用于确保一致性。
您可以删除final关键字或制作HEIGHT和WIDTH局部变量。
currentImage = new Image("res/images/asteroid_blue.png");
final int width= currentImage.getWidth();
final int height = currentImage.getHeight();