调用内部类的私有方法,其中内部类和外部类的构造器都是私有的
2017-04-10 22:43
453 查看
1.首先类如下:
package test; public class Outer { private Outer() { } private void eat(String food) { System.out.println("我在吃"+food); } class Inner{ private Inner(){ } private void go(String city){ System.out.println("我要去"+city); } } }
2.调用方法的类
package test; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class MainTest { public static void main(String[] args) { try { Class clz = Class.forName("test.Outer"); System.out.println(clz); Class clz1 = Class.forName("test.Outer$Inner"); System.out.println(clz1); // 获取外部类方法 Method mt = clz.getDeclaredMethod("eat", String.class); System.out.println(mt); // 获取内部类的方法 Method mt1 = clz1.getDeclaredMethod("go", String.class); System.out.println(mt1); // 获取外部类的构造器 Constructor c = clz.getDeclaredConstructor(); System.out.println(c); c.setAccessible(true);// 使得外部私有构造器可以被访问 // 获取内部构造器 Constructor c1 = clz1.getDeclaredConstructors()[0]; c1.setAccessible(true); System.out.println(c1); // 调用外部类的方法eat() mt.setAccessible(true);// 给私有方法赋权限,使其可以被操作 mt.invoke(c.newInstance(), "米饭"); // 调用内部类的方法 mt1.setAccessible(true);// 理由同上 mt1.invoke(c1.newInstance(c.newInstance()), "苏州"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
3.输出结果
class test.Outerclass test.Outer$Inner
private void test.Outer.eat(java.lang.String)
private void test.Outer$Inner.go(java.lang.String)
private test.Outer()
private test.Outer$Inner(test.Outer)
我在吃米饭
我要去苏州
相关文章推荐
- 类的外部调用私有函数的方法
- Java从外部调用类的私有方法
- ajax内部值外部调用不了的原因及解决方法
- 在构造器内部调用多态方法
- 反射获取内部类以及调用内部类方法
- 外部调用/内部调用Discuz x2论坛最新帖子等版块的方法
- 内部类的方法(外部调用内部类的方法)
- 类中的内部类(静态、非静态、私有)中方法(静态、非静态)的调用
- Java 内部类调用外部类方法的一个注意点
- nodejs(三) 调用内部和外部方法
- 构造器内部调用动态绑定方法
- python中的嵌套类(内部类调用外部类中的方法函数)
- 在类外部调用类的私有方法
- JAVA - - - - 内部类的方法(外部调用内部类的方法)
- js 写一个私有方法供方法内部多处调用
- Java从外部调用类的私有方法
- 定义一个包含私有成员变量和函数的类,再定义一个内部类,在内部类函数中访问外部成员变量,并调用外部函数。在外部类函数中创建内部类对象,调用内部类函数
- Python私有方法不能外部调用怎么理解?
- 关于java成员内部类(普通内部类)在main方法中调用
- 私有内部类的外部调用方式