当API引入新的异常类型时,编写向前兼容的代码

时间:2019-01-30 22:59:24

标签: java exception

将反射代码从Java 8移植到Java 9+时,我注意到的一个问题是,在Java 8 {{1}之前,setAccessible()现在除了InaccessibleObjectException之外还抛出SecurityException }}并非例外类型。

什么是接受的编写代码的方法,该代码必须捕获并处理一个未知的异常,因为它在将来的Java版本中仍然与当前版本兼容? (在这种情况下,唯一的祖先类是InaccessibleObjectException,但是我个人写这样一个无所不包的RuntimeException感觉就像是一种气味。)

1 个答案:

答案 0 :(得分:1)

您可以向运行时请求Java版本(如this post中所述),并使用exception.getClass().getName()以向后兼容的方式获取异常类名称

换句话说

  try {
    method.setAccessible();
  } catch (RuntimeException e) {
    String version = (System.getProperty("java.version"))
    String minorVersion = ver.split("\\.")[1];
    if (minorVersion >=9) {
      if (e.getClass().getName().equals("java.lang.reflect.InaccessibleObjectException")) {
        // Handle java 9 reflection access issue
      } else {
        // Handle java 8 runtime exception
    }
  }