java – 当API引入新的异常类型时,编写与转发兼容的代码

在将反射代码从
Java 8移植到
Java 9时,我注意到的一个问题是setAccessible()现在除了SecurityException之外还抛出InaccessibleObjectException,之前在Java 8中,InaccessibleObjectException不是异常类型.

编写代码的公认方法是什么,必须捕获并处理它无法知道的异常,因为它在未来的Java版本中仍然与当前版本兼容? (在这种情况下,唯一的祖先类是RuntimeException,但这对我个人来说就像是闻到了这样一个无所不包的捕获.)

最佳答案 您可以向运行时询问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
    }
  }





点赞