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)

  • 相关阅读:
    Maker DAO 与稳定币 Dai
    0x 协议治理体系,Part-2:Q&A
    Gnosis白皮书
    Digix:密码学资产中的黄金标准
    闪电网络主心骨——HTLC(哈希时间锁定)简介
    如何减少PDF文件的大小
    以太坊:创建 ERC-20 token
    Sublime Text 3 快捷键大全
    数据库学习第二季第三集:各种编程语言从数据库中获得数据方式小结
    数据库学习第二季第三集:各种编程语言从数据库中获得数据方式小结
  • 原文地址:https://www.cnblogs.com/peida/p/Guava_Throwables.html
Copyright © 2011-2022 走看看