繁体   English   中英

如何使Java编译器忽略错误/警告

[英]How to make java compiler ignore errors/warnings

所以我有以下代码:

 public static Image getImage(String filepath, Class cl) {
    try {
        return ImageIO.read(cl.getResource(filepath));
    }
    catch (IOException e) {
        e.printStackTrace();
    }

    return null;    // Will never execute
}

这是一个基本的try-catch块。 如果我无法读取图像并将其退还,我将立即进入catch块。 但是,由于我的返回值在try块的范围内,而不是在整个函数的范围内,因此,当我尝试编译并运行时,编译器会发出错误消息,因为它认为有可能我从未命中过return语句。 因此,我添加了return null; 行以禁止显示此警告,但是我宁愿使用一种更整洁的方式来执行此操作,而不必放置永远不会运行的代码。 我尝试添加

@SuppressWarnings("all")

对于我的代码,但这仍然给我一个错误。 有任何想法吗? 我觉得应该有一种方法告诉编译器忽略这样的错误。

另外,如果有什么用,我正在使用IntelliJ作为我的IDE。

我想在评论中急于建议@LuCio说些什么。 只是不要捕获异常并将其向上传递:

public static Image getImage(String filePath, Class<?> clazz) throws IOException {
    return ImageIO.read(clazz.getResource(filePath));
}

这样,您就创建了一个简单的辅助方法。 如果要返回null,则必须在JavaDoc中进行记录,并且每个调用者都必须使用not-null断言逻辑,如果错误为null,则抛出错误。

尝试捕获块的功能相同。 因此,您无需向上传播null,而是向上传播异常。 您在某处说过要将图像分配给静态字段,因此您可以像这样轻松地做到这一点:

static {
    try {
         MY_IMAGE = getImage("somepath", MyClass.class);
    } catch(IOException e){
        throw new IOError(e); // will kill the Vm with an error
    }
}

但也许在某个地方您还有其他动作。 比只是杀死VM。 也许使用默认图像:

final Image image;
try {
    image = getImage("somepath", MyClass.class);
} catch(IOException e){
    e.printStacktrace();
    image = new SomeDefaultImage();
}

// do something with image

总而言之,这是要走的路。 您无法使用辅助方法来确定失败时的处理方法。 这应该始终由调用代码完成。

好的,我相信我混淆了catch块的用途。 感谢@Ben和@Zephyr以及其他所有人的帮助。 我将代码修改为:

public static Image getImage(String filepath, Class cl) {
    try {
        return ImageIO.read(cl.getResource("hello"));
    } catch (IOException e) {
        System.out.println(e.getMessage());
        e.printStackTrace();
        throw new IOError(e);
    }
}

编辑:经过更多讨论,并查看其他人发布的其他选项,我更新了上面的代码,该代码满足了编译器的要求。 请注意,替换行

throw new IOError(e)

System.exit(0);

无法修复错误,因为据我所知,编译器无法在编译时告知程序是否将结束。 拥有一种抑制警告的方式将很有帮助,因为我们知道在运行时程序将始终(或实际上始终)结束,但是@SuppressWarnings毫无用处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM