Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包装java io以不强制客户端使用异常检查的库_Java_Exception - Fatal编程技术网

包装java io以不强制客户端使用异常检查的库

包装java io以不强制客户端使用异常检查的库,java,exception,Java,Exception,是否有一些库可以提供java io的包装器,允许不捕获所有异常,从而使代码更干净、更易于理解 比如说,我不想这样: public void loadSomething(InputStream in) throws SomeCheckingException { BufferedReader reader = getReader(in); try { someId = reader.readLine(); ... } catch(IOExcept

是否有一些库可以提供java io的包装器,允许不捕获所有异常,从而使代码更干净、更易于理解

比如说,我不想这样:

public void loadSomething(InputStream in) throws SomeCheckingException {

   BufferedReader reader = getReader(in);

    try {
      someId = reader.readLine();
      ...

    } catch(IOException ex) {
      ...        
    } finally {
        try {
        reader.close();
        } catch(Exception ex) {
        ...
        } 
    }
 }
public void loadSomething(InputStream in) throws RuntimeException {

 someId = getReader(in).readLine();

}
public void loadSomething(InputStream in) {

    consoleId = getReader(in).readLine();

}
我更喜欢这个:

public void loadSomething(InputStream in) throws SomeCheckingException {

   BufferedReader reader = getReader(in);

    try {
      someId = reader.readLine();
      ...

    } catch(IOException ex) {
      ...        
    } finally {
        try {
        reader.close();
        } catch(Exception ex) {
        ...
        } 
    }
 }
public void loadSomething(InputStream in) throws RuntimeException {

 someId = getReader(in).readLine();

}
public void loadSomething(InputStream in) {

    consoleId = getReader(in).readLine();

}
此库将在getReader内处理异常,并将关闭
inputstream
,将一些错误放入日志(如果已配置),将异常从方法中抛出到客户端。如果客户愿意,他会处理的

在客户机上:

try {
  loadSomething(...)
} catch(RuntimeException ex) {...}
做一些或多或少像您在FileUtils中描述的事情。请在此处查看readLines方法:

做了一些或多或少像您在FileUtils中描述的事情。请在此处查看readLines方法:

我更喜欢这个:

public void loadSomething(InputStream in) throws SomeCheckingException {

   BufferedReader reader = getReader(in);

    try {
      someId = reader.readLine();
      ...

    } catch(IOException ex) {
      ...        
    } finally {
        try {
        reader.close();
        } catch(Exception ex) {
        ...
        } 
    }
 }
public void loadSomething(InputStream in) throws RuntimeException {

 someId = getReader(in).readLine();

}
public void loadSomething(InputStream in) {

    consoleId = getReader(in).readLine();

}
改为这样做:

public void loadSomething(InputStream in) throws IOException {

 consoleId = getReader(in).readLine();

}
检查异常提供了一种确保处理异常情况的方法。如果不想在方法中处理它们,只需声明需要在调用方法中处理它们

如果确实要屏蔽异常,那么当然:

public void loadSomething(InputStream in) {

    try {
        consoleId = getReader(in).readLine(); 
        // ...all of your other code here...
    }
    catch (IOException ioe) {
    }
}
但我强烈建议不要隐藏这样的异常。这通常会导致难以调试错误


分别:

  • 读卡器上调用
    close
    调用
    InputStream上的
    close
    。因为您不能控制
    输入流
    ,所以这不是一个好主意。(是的,这有点棘手。你可以很容易地说,既然你拥有
    阅读器
    ,你就应该关闭它。但不管好坏,这些类都不是这样工作的。)
我更喜欢这个:

public void loadSomething(InputStream in) throws SomeCheckingException {

   BufferedReader reader = getReader(in);

    try {
      someId = reader.readLine();
      ...

    } catch(IOException ex) {
      ...        
    } finally {
        try {
        reader.close();
        } catch(Exception ex) {
        ...
        } 
    }
 }
public void loadSomething(InputStream in) throws RuntimeException {

 someId = getReader(in).readLine();

}
public void loadSomething(InputStream in) {

    consoleId = getReader(in).readLine();

}
改为这样做:

public void loadSomething(InputStream in) throws IOException {

 consoleId = getReader(in).readLine();

}
检查异常提供了一种确保处理异常情况的方法。如果不想在方法中处理它们,只需声明需要在调用方法中处理它们

如果确实要屏蔽异常,那么当然:

public void loadSomething(InputStream in) {

    try {
        consoleId = getReader(in).readLine(); 
        // ...all of your other code here...
    }
    catch (IOException ioe) {
    }
}
但我强烈建议不要隐藏这样的异常。这通常会导致难以调试错误


分别:

  • 读卡器上调用
    close
    调用
    InputStream上的
    close
    。因为您不能控制
    输入流
    ,所以这不是一个好主意。(是的,这有点棘手。你可以很容易地说,既然你拥有
    阅读器
    ,你就应该关闭它。但不管好坏,这些类都不是这样工作的。)


当异常显示为未声明抛出
IOException
时,客户端如何抛出异常?还要注意,您的第一位代码甚至无效-您不能在
最后一个
块之后放置
catch
块。如果您想让类更易于阅读,只需更改方法头,使其包含一个
抛出
。然后在使用它的代码中包含
try catch
。您考虑过使用该语句吗?这样做将大大减少第一个方法的体积。如果该方法采用流作为参数,通常不应关闭它。让溪流的开启者关闭它。由于调用者打开了流,它可能已经处理了IOException,因此您只需从该方法中抛出IOException,并让调用者处理IOException客户端如何抛出异常,当它出现时,没有声明抛出
IOException
?还要注意,您的第一位代码甚至无效-您不能将
catch
块放在
finally
块之后。如果您想使类更易于阅读,只需更改方法头,使其包含
throws
。然后在使用它的代码中包含
try catch
。您考虑过使用该语句吗?这样做将大大减少第一个方法的体积。如果该方法采用流作为参数,通常不应关闭它。让溪流的开启者关闭它。由于调用方打开了流,它可能已经处理了IOException,所以您只需从这个方法中抛出IOException,并让调用方处理IOExceptionRows IOException=throwsRuntimeException@ses:好吧,如果你想改变问题。。。是的,您可以将所有已检查的异常更改为运行时异常。这是个好主意吗?不知道,你喜欢什么样的大括号放置/代码缩进?(例如,这是一个风格论证。)我会说,不,这是一个糟糕的想法。但那就是我。@ses:不。IOException不是运行时异常。我知道这就是我不想使用它的原因。见我的问题。我最初的问题是使用RuntimeExceptions而不是ChekingExceptions。(我只是在写问题的时候忘记了抛出RuntimeException)这个答案证明了你的代码可以和你在仍然使用IOException时所问的一样短。无论是否选中异常,您都必须在某个地方处理它,并在某个地方关闭流。无论是否检查异常,在同一位置都需要相同的代码。throws IOException=throwsRuntimeException@ses:好吧,如果你想改变问题。。。是的,您可以将所有已检查的异常更改为运行时异常。这是个好主意吗?不知道,你喜欢什么样的大括号放置/代码缩进?(例如,这是一个风格论证。)我会说,不,这是一个糟糕的想法。但那就是我。@ses:不。IOException不是运行时异常。我知道这就是我不想使用它的原因。见我的问题。我最初的问题是使用RuntimeExceptions而不是ChekingExceptions。(我只是在写问题的时候忘记了抛出RuntimeException)这个答案证明了你的代码可以和你在仍然使用IOException时所问的一样短。无论是否选中异常,您都必须在某个地方处理它,然后