[英]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.