Reflection API не выдает такого исключения метода при переходе на Java 9 - PullRequest
0 голосов
/ 20 декабря 2018

Я мигрирую в java 9 из java 8. Я использовал отражение, чтобы выбрать метод 'getStackTraceElement (int)' из класса 'java.lang.Throwable', и я установил доступность "true".

программы хорошо работают для Java 8, но когда я перешел на Java 9, он начал сбой с ошибкой 'java.lang.NoSuchMethodException: java.lang.Throwable.getStackTraceElement (int).'

У меня есть код, который отлично работает в Java 8, как следующий частный статический метод 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");
    }
}'

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Если вы посмотрите на Throwable class java doc https://docs.oracle.com/javase/9/docs/api/java/lang/Throwable.html, вы увидите, что getStackTraceElement удален из класса, что является причиной, по которой вы получаете эту ошибку.

Как уже упоминалось Демозо, используйте https://docs.oracle.com/javase/9/docs/api/java/lang/StackWalker.html.

0 голосов
/ 20 декабря 2018

Специально для этой цели в Java 9 введен класс, называемый StackWalker.

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

...