eclipse要求我在finally块中使用try/catch包围 - 可以禁用它吗?

Ash*_*osh 4 java eclipse

在我的一个Java应用程序代码中,我有一个try-catch-finally块,其中try块创建一些输入和输出流,如果出现问题,我将关闭任何先前打开的流finally.

finally
{
    if(inputStream != null)
        inputStream.close();
    if(outputStream != null)
        outputStream.close();
}
Run Code Online (Sandbox Code Playgroud)

但是<stream>.close()Eclipse中的这行显示了该行代码中的"Unhandled exception IOException"错误,并显示该解决方案是try/catchfinally块中包含另一个,这似乎是编程实践中的坏事,我不想在finally块中.

我的问题是:是否有可能在Eclipse中删除此错误并try/catch仅在我需要它时使用而不是eclipse告诉我进行try/catch添加.(因为我已经开始尝试通过更换以避免异常try/catchif/else越好).

Cha*_*win 9

这不是Eclipse错误,它是Java编译器错误.Eclipse只是为您报告Java编译错误.由于代码在没有 try/catch子句的情况下无法编译,因此无法 "关闭" .它是Java中的一个安全功能,它会强制您处理通常抛出的异常.

方法在签名中有例外.例如,InputStream.close()抛出IOException,强制您在try/catch块中处理它.

public void close() throws IOException {
    ...
Run Code Online (Sandbox Code Playgroud)

抛出异常是告诉程序一个重要问题 - 必须处理 - 的一种方式.

我的问题是:是否有可能在eclipse中删除此错误并在需要时使用try/catch而不是eclipse告诉我做try/catch add.

不,这是不可能的.

(因为我已经尝试通过用if/else替换try/catch来避免异常).

您通常不应尝试try/catchif/else块替换块.它们是具有不同目的的两个不同特征.

例外是Java必不可少的功能. 阅读并了解它.


Paw*_*rok 6

正确地应该这样做以确保我们尝试关闭两个流.

finally
{
   try {
     if(inputStream != null)
        inputStream.close();
   }
   catch(Exception e)
   { /* Ignore */ }

   try {
     if(outputStream != null)
        outputStream.close();
   }
   catch(Exception e)
   { /* Ignore */ }
}
Run Code Online (Sandbox Code Playgroud)