java - 迁移到 Java 9 时,反射 API 没有抛出此类方法异常

标签 java reflection java-9

我正在从 Java 8 迁移到 Java 9 我正在使用反射从类“java.lang.Throwable”中获取方法“getStackTraceElement(int)” 我将辅助功能设置为“真”。

程序适用于 Java 8 但是当我迁移到 java 9 时, 它开始因错误而失败 'java.lang.NoSuchMethodException: java.lang.Throwable.getStackTraceElement(int) 。 '

我的代码在 Java 8 中运行良好,如下所示 私有(private)静态方法 m;

'public static void main(String args[])
{
    try 
    {
        System.out.println("here1");
        //next line throws error
        m = Throwable.class.getDeclaredMethod("getStackTraceElement",int.class);
        m.setAccessible(true);
        System.out.println("here2");
    } catch (Exception e) {

        //logger.warn(e.getLocalizedMessage(), e);
        System.out.println("==>"+e.getLocalizedMessage);
        System.out.println("==>"+e.getName);
        System.out.println("==>"+e.getStackTraceElement);
        System.out.println("here3");
    }
}'

最佳答案

他们在 Java 9 中引入了一个专门用于此目的的类,称为 StackWalker

https://docs.oracle.com/javase/9/docs/api/java/lang/StackWalker.html

关于java - 迁移到 Java 9 时,反射 API 没有抛出此类方法异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53866372/

相关文章:

java - 如何在 JAX-WS Web 服务上引发自定义错误?

java - 警告 : unknown enum constant Status. 稳定

java - Java 中具有多个条件的三元运算符抛出错误

java - 如何在带有 BrowserStack 的 Selenium 测试中使用 Chrome 扩展?

java - 无法运行依赖项 main 函数

java - 通过反射获取枚举值

c# - 我可以在 C#/WPF 中获取绑定(bind)对象的 Type() 吗(即使绑定(bind)值为 null)?

java - 未命名模块通过 ServiceLoader::load 与命名模块交互

java - 不可变集和图的JDK9随机化

java - 使用类路径运行 jar 文件