天天看點

反射(四)使用反射機制調用對象的私有方法及成員變量

package com.ygl.reflect;

public class Private {

   private String sayName(String name){

 return name;

   }

}

//*****************************

package com.ygl.reflect;

import java.lang.reflect.Method;

public class Test11 {

   public static void main(String[] args) throws Exception {

  Private tt=new Private();

  Class<?> clazz=tt.getClass();

  //可以獲得定義過的對象,也即可以獲得私有的

  Method method=clazz.getDeclaredMethod("sayName", new Class[]{String.class});

  method.setAccessible(true);//壓制java的預設通路控制的檢查

  String str =  (String) method.invoke(tt, new Object[]{"ygl"});

  System.out.println(str);

}

}

//========================================

package com.ygl.reflect;

public class Private {

  private String name="yyy";

  public String getName(){

 return name;

  }

}

//****************************************

package com.ygl.reflect;

import java.lang.reflect.Field;

public class Test12 {

    public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {

    Private p=new Private();

    Class<?>  clazz=p.getClass();

    Field field=clazz.getDeclaredField("name");

    field.setAccessible(true);

    field.set(p, "ygl");

    System.out.println(p.getName());

}

}