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

如何使java编译器忽略错误/警告,java,Java,因此,我有以下代码: 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 }

因此,我有以下代码:

 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块的范围内,而不是整个函数的范围内,所以当我尝试编译和运行时,编译器会发出一个错误,因为它发现我可能从未遇到return语句。因此,我添加了返回null;行以抑制此警告,但我希望有一种更简洁的方法来执行此操作,而不放置永远不会运行的代码。我试着加上

@SuppressWarnings("all")
我的代码,但它仍然给我一个错误。有什么想法吗?我觉得应该有一种方法告诉编译器忽略这样的错误


另外,如果它有任何用处,我使用IntelliJ作为我的IDE。

好的,我认为我混淆了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)


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

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

public static Image getImage(String filePath, Class<?> clazz) throws IOException {
    return ImageIO.read(clazz.getResource(filePath));
}
但也许在某个地方你有另一个动作。而不是仅仅杀死虚拟机。可能使用默认图像:

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

// do something with image

总的来说,这是一条路要走。您不能使用助手方法来决定失败时要做什么。这应该总是由调用代码来完成。

“永远不会运行的代码”-如果您的代码确实因为某种原因抛出了
IOException
,该怎么办?为什么您如此确信您永远不会处于给定文件路径只是。。。错了吗?还有:这是一种“整洁”的方式。添加一条Javadoc注释,解释:“@returntheloaded image或null如果文件路径没有指向现有文件”@user2864740我认为只有最后一行
returnnull
被注释掉时错误才会出现(这是他们想做的,因为他们眼中的这一行永远不会被执行),我不确定。抛出异常时,编译是否在catch块之后停止?或者我把fail(“message”)放在我的catch块中会让人困惑吗?@stackUnderflow执行不会简单地在catch上停止。。。一个catch块明确地存在于此,因此您的应用程序不会停止,而是有时间实际处理问题。这也不起作用。您需要声明您的
getImage()
方法可能会引发
异常。因此,
publicstaticimagegetimage(stringfilepath,Class cl)抛出IOException{
。然而,这只意味着您需要在代码中调用
getImage()的另一个
try/catch
如果捕获并抛出异常而不进行任何额外处理,则根本不需要捕获它。这将给出:
公共静态映像getImage(String filepath,Class cl)抛出IOException{return ImageIO.read(cl.getResource(filepath));}
当一个方法抛出异常时,它基本上是说“出了点问题,我不知道该怎么办,你来处理!“因此,调用该方法的代码现在必须处理该问题。最终,您需要在代码中处理异常…@Zephyr是-但在上述情况下也是-只有方法签名中的异常声明丢失。这会导致编译时错误。它应该是:
public static Image getImage(String filepath,Class cl)抛出IOException{…}
。因此,我的建议较短,但没有任何更改。@Zephyr我想说,它不那么令人困惑,因为没有人想知道捕获是为了什么目的定义的。它没有附加值。虽然目的很明确,但在第一个代码示例中有两个语法错误。它应该是:
return ImageIO.read(clazz.getResource(filePath));
static {
    try {
         MY_IMAGE = getImage("somepath", MyClass.class);
    } catch(IOException e){
        throw new IOError(e); // will kill the Vm with an error
    }
}
final Image image;
try {
    image = getImage("somepath", MyClass.class);
} catch(IOException e){
    e.printStacktrace();
    image = new SomeDefaultImage();
}

// do something with image