我正在尝试为最终图像创建一个枚举,其中变量'image'将从文件中加载。如果发生IOException,我想将'image'设置为null。但是,根据编译器的说法,当catch块运行时,可能会或可能不会设置“image”。检测构造函数中是否为空白
public enum Tile {
GROUND("ground.png"), WALL("wall.png");
final Image image;
Tile(String filename) {
try {
image = ImageIO.read(new File("assets/game/tiles/" + filename));
} catch (IOException io) {
io.printStackTrace();
image= null; // compiler error 'image may already have been assigned'
}
}
}
最终变量需要在构造函数中进行设置,因此,如果由于某种原因,图像不能被读取,它必须被设置的东西。但是,没有办法确定图像是否已设置。 (在这种情况下,如果没有设置图像,捕获块才会运行,但编译器说它可能已经设置)
有没有办法让我只能在catch块中将图像分配给null尚未设置?
这就是我会这样做的。它重构代码以突破加载图像的逻辑,将值分配给实例字段。我会更进一步,将方法移出enum类并进入实用类(方法和代码都不会与枚举有关)。相比之下,在构造函数中使用临时变量是一个糟糕的解决方案。 – Bohemian