Java

java如何调用其他类中的private方法

2019-05-22  本文已影响0人  firststep

遇到问题

今天逛论坛的时候看到一个人在问,private这个方法别的类能用么?我当时感觉这不是扯么,四个修饰不知道么?private肯定是只能自己来用。但是看到别人的解答说可以用反射来获得,这就感觉很新奇然后自己决定去试一下,并且看一下java的API。

代码实现

package StudyPrivate;

public class Some {

    public void doSoming() {
        System.out.println("doSoming");
    }

    private void doSomingPrivte() {
        System.out.println("doSomingprivate");
    }
}
package StudyPrivate;

import java.lang.reflect.Method;

public class DemoPrivateInvoke {
    public static void main(String[] args) {
        printMethodPrivateInvoke(new Some());
    }
    public static void printMethodPrivateInvoke(Object obj) {
        Class c1 = obj.getClass();
        try {
            Method method = c1.getDeclaredMethod("doSomingPrivte");
            method.setAccessible(true);
            method.invoke(obj);
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}

方法解析

  1. c1.getDeclaredMethod("doSomingPrivate")获取到Some类中所有的方法对象dm,getDeclaredMethod方法可以获取到Some中所有方法,也就是通过(private,protected,default,public)修饰的方法。
  2. method.setAccessible(true)这样在调用方法时他不会检查方法的修饰是public还是private。如果没有method.setAccessible(true),那在invoke()调用方法时会报错,同样如果调用方法setAccessible()设置的是false,一样会报错。
  3. method.invoke(obj),对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。

输出截图

image.png
上一篇下一篇

猜你喜欢

热点阅读