java7新特性MethodHandle学习

/**
 * @description:
 * @author: Candy
 * @date: 2022-04-28 22:43
 **/
public class TestStudent {
  //测试普通方法
  public void test(String str){
    System.out.println(str);
  }
  //测试静态方法
  public static void testStatic(String str){
    System.out.println(str);
  }
  //测试私有静态方法
  private static void testPrivate(String str){
    System.out.println(str);
  }
  //测试私有方法
  private String testReturn(){
    System.out.println("赵六");
    return "";
  }
  public static void main(String[] args) throws Throwable {
    //相当于创建了MethodHandle工厂类
    MethodHandles.Lookup lookup = MethodHandles.lookup();            
    MethodHandle mt = lookup.findVirtual(TestStudent.class, "test", MethodType.methodType(void.class, String.class));  //第一个参数为返回值类型,第二个参数为参数类型
    mt.invoke(new TestStudent(),"张三");

    MethodHandle m = lookup.findStatic(TestStudent.class, "testStatic", MethodType.methodType(void.class, String.class));
    m.invoke("李四");

    MethodHandle testPrivate = lookup.findStatic(TestStudent.class, "testPrivate", MethodType.methodType(void.class, String.class));
    testPrivate.invoke("王五");

    MethodHandle testReturn = lookup.findVirtual(TestStudent.class, "testReturn", MethodType.methodType(String.class));
    testReturn.invoke(new TestStudent());
  }
}