zoukankan      html  css  js  c++  java
  • Guava学习笔记:简化异常处理的Throwables类

      有时候, 当我们我们捕获异常, 并且像把这个异常传递到下一个try/catch块中。Guava提供了一个异常处理工具类, 可以简单地捕获和重新抛出多个异常。例如:

    import java.io.IOException;
    import org.junit.Test;
    import com.google.common.base.Throwables;
    
    public class ThrowablesTest {
        
        @Test
        public void testThrowables(){
            try {
                throw new Exception();
            } catch (Throwable t) {
                String ss = Throwables.getStackTraceAsString(t);
                System.out.println("ss:"+ss);
                Throwables.propagate(t);
            }
        }
        
        @Test
        public void call() throws IOException {
            try {
                throw new IOException();
            } catch (Throwable t) {
                Throwables.propagateIfInstanceOf(t, IOException.class);
                throw Throwables.propagate(t);
            }
        }    
    }

       将检查异常转换成未检查异常,例如:

    import java.io.InputStream;
    import java.net.URL;
    import org.junit.Test;
    import com.google.common.base.Throwables;
    
    public class ThrowablesTest {
        
        @Test
        public void testCheckException(){
            try {  
                URL url = new URL("http://ociweb.com");  
                final InputStream in = url.openStream();  
                // read from the input stream  
                in.close();  
            } catch (Throwable t) {  
                throw Throwables.propagate(t);  
            }  
        }
    }

       传递异常的常用方法:

      1.RuntimeException propagate(Throwable):把throwable包装成RuntimeException,用该方法保证异常传递,抛出一个RuntimeException异常
      2.void propagateIfInstanceOf(Throwable, Class<X extends Exception>) throws X:当且仅当它是一个X的实例时,传递throwable
      3.void propagateIfPossible(Throwable):当且仅当它是一个RuntimeException和Error时,传递throwable
      4.void propagateIfPossible(Throwable, Class<X extends Throwable>) throws X:当且仅当它是一个RuntimeException和Error时,或者是一个X的实例时,传递throwable。

      使用实例:

    import java.io.IOException;
    import org.junit.Test;
    import com.google.common.base.Throwables;
    
    public class ThrowablesTest {    
        @Test
        public void testThrowables(){
            try {
                throw new Exception();
            } catch (Throwable t) {
                String ss = Throwables.getStackTraceAsString(t);
                System.out.println("ss:"+ss);
                Throwables.propagate(t);
            }
        }
        
        @Test
        public void call() throws IOException {
            try {
                throw new IOException();
            } catch (Throwable t) {
                Throwables.propagateIfInstanceOf(t, IOException.class);
                throw Throwables.propagate(t);
            }
        }
        
        public Void testPropagateIfPossible() throws Exception {
              try {
                  throw new Exception();
              } catch (Throwable t) {
                Throwables.propagateIfPossible(t, Exception.class);
                Throwables.propagate(t);
              }
    
              return null;
        }
    }

      Guava的异常链处理方法:

      1.Throwable getRootCause(Throwable)
      2.List<Throwable> getCausalChain(Throwable)
      3.String getStackTraceAsString(Throwable)

  • 相关阅读:
    【ClickHouse 技术系列】 ClickHouse 聚合函数和聚合状态
    【ClickHouse 技术系列】 ClickHouse 中的嵌套数据结构
    报表功能升级|新增的这4项图表组件太太太好用了吧!
    【视频特辑】数据分析师必备!快速制作一张强大好用的大宽表
    使用云效Codeup10分钟紧急修复Apache Log4j2漏洞
    技术干货 | 使用 mPaaS 配置 SM2 国密加密指南
    “全”事件触发:阿里云函数计算与事件总线产品完成全面深度集成
    3类代码安全风险如何避免?
    为余势负天工背,云原生内存数据库Tair助力用户体验优化
    LeetCode_Search for a Range
  • 原文地址:https://www.cnblogs.com/peida/p/Guava_Throwables.html
Copyright © 2011-2022 走看看