美文网首页Java
java如何调用其他类中的private方法

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

作者: firststep | 来源:发表于2019-05-22 15:16 被阅读0次

    遇到问题

    今天逛论坛的时候看到一个人在问,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

    相关文章

      网友评论

        本文标题:java如何调用其他类中的private方法

        本文链接:https://www.haomeiwen.com/subject/zlhuzqtx.html