java - 检测构造函数中的 final 是否为空

标签 java constructor try-catch final

我正在尝试为最终图像创建枚举,其中将从文件加载变量“图像”。如果发生 IOException,我希望将“图像”设置为空。然而,根据编译器的说法,当 catch block 运行时,'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'
        }
    }
}

Final 变量需要在构造函数中设置,因此如果由于某种原因无法读取图像,则必须将其设置为某些内容。但是,无法判断图像是否已实际设置。 (在这种情况下,catch block 只有在没有设置图像时才会运行,但编译器说它可能已被设置)

有没有办法让我在 catch block 中将图像分配给空值,前提是它还没有被设置?

最佳答案

尝试使用局部临时变量:

public enum Tile {
    GROUND("ground.png"), WALL("wall.png");
    final Image image;
    Tile(String filename) {

        Image tempImage;
        try {
            tempImage= ImageIO.read(new File("assets/game/tiles/" + filename));
        } catch (IOException io) {
            io.printStackTrace();
            tempImage= null; // compiler should be happy now.
        }

        image = tempImage;
    }
}

关于java - 检测构造函数中的 final 是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35642608/

相关文章:

java - 创建包含新实例的列表的方法的命名

java - 使用 Java 中的正则表达式计算文本文件中模式的出现次数

c++ - 编译我的 3 个文件时,我收到错误提示 'operator=' 不匹配

C# 构造函数 - 设置第二个属性

c++ - 定义或声明中的成员初始值设定项列表?

c# - 修改现有程序以更好地处理异常

python - Python 中的 try-else 有什么用?

java - 服务器发送的事件不适用于 Jersey SSE

ruby-on-rails-4 - Rails 电子邮件传送错误检查 - Deliver_now

Java 方法从继承返回类型