java吧 关注:1,236,056贴子:12,704,111
  • 13回复贴,共1

求解关于反射获取非public类

只看楼主收藏回复

比如我想获取java.lang.Shutdown.exit方法。
但是Shutdown不是public类。
getMethod被阻止了,报错NoSuchMethodException
使用getDeclaredMethods循环后获取exit方法后invoke报错
java.lang.IllegalAccessException: Class XXX can not access a member of class java.lang.Shutdown with modifiers "static"
at sun.reflect.Reflection.ensureMemberAccess(65)
求解= =


IP属地:广东1楼2015-01-30 18:51回复
    补Invoke的代码_(:з」∠)_
    Class z = Class.forName("java.lang.Shutdown");
    for(Method m : z.getDeclaredMethods()) {
    if("exit".equals(m.getName())) {
    m.invoke(null, 0);
    }
    }
    Class z = Class.forName("java.lang.Shutdown");
    Method exit = z.getMethod("exit", int.class);
    exit.setAccessible(true);
    exit.invoke(z, 0);


    IP属地:广东2楼2015-01-30 19:02
    回复
      自己改 Shutdown再调用不就完了么,何必钻牛角尖。。。工具包是人家做好了给你用的,但也没说不让你改啊 ----------虽然我完全没看你的代码


      IP属地:辽宁3楼2015-01-30 19:26
      收起回复
        很明显, Class类中不存在exit方法
        你如果调用静态方法,那么invoke的第一参数为null
        If the underlying method is static, then the specified {@code obj} argument is ignored. It may be null.


        4楼2015-01-30 22:50
        收起回复