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)

  • 相关阅读:
    上位机获取Mjpeg视频流程序(C#.NET语言+AForge.NET控件)(待测试)
    C# Ping类的使用
    四旋翼上位机模拟显示四轴状态
    利用Sniffer分析 ARP报文
    C# 基于CSGL opengl
    用C#实现对本机IP地址的设置
    使用grub4dos引导Linux
    几个常用的批处理(DOS指令)的应用
    四旋翼飞行器之OSD(基本完成)
    Posix多线程编程学习笔记(转)
  • 原文地址:https://www.cnblogs.com/peida/p/Guava_Throwables.html
Copyright © 2011-2022 走看看