从外部访问类中的私有方法的方法
2011-10-11 11:07
113 查看
使用反射机制,需要知道这个方法名(摘自think in java)
package access.intefacea; public interface A { void f(); }
package access.pmethod; import access.intefacea.*; class C implements A{ public void f() { System.out.println("public C.f()"); } public void g(){ System.out.println("public C.g()"); } void u(){ System.out.println("package C.u()"); } protected void v(){ System.out.println("protected C.v()"); } private void w(){ System.out.println("private C.w()"); } } public class HiddenC { public static A makeA(){ return new C(); } }
package access.test; import java.lang.reflect.Method; import access.intefacea.*; import access.pmethod.*; public class HiddenImplementation { public static void main(String[] args) throws Exception { A a = HiddenC.makeA(); a.f(); System.out.println(a.getClass().getName()); //在这里C是不可见的 /* if(a instanceof C){ C c = (C)a; c.g(); } */ callHiddenMethod(a, "g"); callHiddenMethod(a, "u"); //访问包访问权限的方法 callHiddenMethod(a, "v"); //访问proctected权限的方法 callHiddenMethod(a, "w"); //访问私有权限方法 //如果不知道方法名,可以通过javap -private C来获得 } static void callHiddenMethod(Object a, String methodName) throws Exception{ Method g = a.getClass().getDeclaredMethod(methodName); g.setAccessible(true); //设置为不检查权限 g.invoke(a); } }
相关文章推荐
- 私有成员函数外部访问方法
- php中类外部访问类私有属性的方法
- WampServer PHP服务配置方法(允许外部访问、phpmyadmin设置为输入用户名密码才可登录等)
- Tomcat访问外部应用时404一些解决方法
- java 反射方式访问私有属性和方法
- 利用java反射机制,实现对类的私有变量和私有方法的访问
- java反射访问私有属性和方法
- 类中内部类中的方法访问外部类中变量的示例
- GObject 子类私有属性的外部访问
- 使用VBS访问外部文本文件一些方法和脚本实例
- 外部类可以访问内部类的私有成员
- Java从外部调用类的私有方法
- iOS访问类的私有成员变量及私有方法
- 在类外部调用类的私有方法
- JavaSE8基础 同一个类下可以访问 默认/私有/受保护/公有的方法
- 如何利用反射去访问一个私有的方法
- 阿里云服务器外部访问8080端口方法-阿里云安全规则
- JavaScript中的私有函数;Javascript构造函数的私有方法中访问其属性和公有方法
- c#访问类的私有成员的三种方法
- Java内存理解 && 反射访问私有属性或方法