let*_*ava 3 java reflection java-9
我正在从java 8迁移到java 9我正在使用反射从类'java.lang.Throwable'获取方法'getStackTraceElement(int)'而我正在将可访问性设置为"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");
}
}'
Run Code Online (Sandbox Code Playgroud)
小智 6
他们在Java 9中引入了一个专门用于此目的的类,称为StackWalker.
https://docs.oracle.com/javase/9/docs/api/java/lang/StackWalker.html