exceptions - Converting Checked to Unchecked Exceptions

We can still catch and handle the specific exception by using getCause(), as seen below:

// exceptions/TurnOffChecking.java
// (c)2017 MindView LLC: see Copyright.txt
// We make no guarantees that this code is fit for any purpose.
// Visit http://OnJava8.com for more book information.
// "Turning off" Checked exceptions

import java.io.*;

class WrapCheckedException {
  void throwRuntimeException(int type) {
    try {
      switch (type) {
        case 0:
          throw new FileNotFoundException();
        case 1:
          throw new IOException();
        case 2:
          throw new RuntimeException("Where am I?");
        default:
          return;
      }
    } catch (IOException | RuntimeException e) {
      // Adapt to unchecked:
      throw new RuntimeException(e);
    }
  }
}

class SomeOtherException extends Exception {}

public class TurnOffChecking {
  public static void main(String[] args) {
    WrapCheckedException wce = new WrapCheckedException();
    // You can call throwRuntimeException() without
    // a try block, and let RuntimeExceptions
    // leave the method:
    wce.throwRuntimeException(3); // no output
    // Or you can choose to catch exceptions:
    for (int i = 0; i < 4; i++) {
      try {
        if (i < 3) {
          wce.throwRuntimeException(i);
        } else {
          throw new SomeOtherException();
        }
      } catch (SomeOtherException e) {
        System.out.println("SomeOtherException: " + e);
      } catch (RuntimeException re) {
        try {
          throw re.getCause();
        } catch (FileNotFoundException e) {
          System.out.println("FileNotFoundException: " + e);
        } catch (IOException e) {
          System.out.println("IOException: " + e);
        } catch (Throwable e) {
          System.out.println("Throwable: " + e);
        }
      }
    }
  }
}
/* Output:
FileNotFoundException: java.io.FileNotFoundException
IOException: java.io.IOException
Throwable: java.lang.RuntimeException: Where am I?
SomeOtherException: SomeOtherException
*/

getCause

public Throwable getCause()

Returns the cause of this throwable or null if the cause is nonexistent or unknown. (The cause is the throwable that caused this throwable to get thrown.)

This implementation returns the cause that was supplied via one of the constructors requiring a Throwable, or that was set after creation with the initCause(Throwable) method. While it is typically unnecessary to override this method, a subclass can override it to return a cause set by some other means. This is appropriate for a "legacy chained throwable" that predates the addition of chained exceptions to Throwable. Note that it is not necessary to override any of the PrintStackTrace methods, all of which invoke the getCause method to determine the cause of a throwable.

Returns:

the cause of this throwable or null if the cause is nonexistent or unknown.

Since:

1.4

references:

1. On Java 8 - Bruce Eckel

2. https://github.com/wangbingfeng/OnJava8-Examples/blob/master/exceptions/TurnOffChecking.java 

3. https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html#getCause--

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值