首页 > 其他分享 >【反射】方法句柄

【反射】方法句柄

时间:2022-10-03 11:13:13浏览次数:42  
标签:反射 句柄 void public Person say MethodType 方法 class

public class Person {
    private String name = "小张";

    public void say(String c) {
        System.out.println(c);
    }

    public void say() {
        System.out.println("hello," + name);
    }
}
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;

public class UseMethodHandle {
    public static void main(String[] args) {
        MethodHandles.Lookup lookup = MethodHandles.lookup();
        MethodType mtCons = MethodType.methodType(void.class);
        try {
            //得到Person类的构造方法的方法句柄
            MethodHandle mhCons = lookup.findConstructor(Person.class, mtCons);

            //调用构造方法,得到Person类的对象
            Person p = (Person)mhCons.invokeExact();

            //开始准备调用Person对象的say方法
            MethodType mt = MethodType.methodType(void.class,String.class);
            MethodHandle mh = lookup.findVirtual(Person.class, "say", mt);
            mh.invokeExact(p,"hello");

        }catch (Throwable e){
            e.printStackTrace();
        }
    }
}

标签:反射,句柄,void,public,Person,say,MethodType,方法,class
From: https://www.cnblogs.com/xl4ng/p/16750162.html

相关文章

  • 通过反射加载内部或者外部class对象
    一、class对象信息importcom.baomidou.mybatisplus.core.toolkit.StringUtils;importlombok.Data;/***handler的配置信息*/@DatapublicclassHandlerConfig......
  • Node.js使用多进程提高任务执行效率的方法
    在Node.JS中使用多进程非常简单,合理使用多进程,可以解放硬件的能力,让软件的运行效率得到肉眼可见的提升。本文详细讲解了Node.js使用多进程提高任务执行效率的方法,对大家的学......
  • 【反射】反射基本使用
    1.获取类信息classStudent{static{System.out.println("加载Student类");}publicStudent(){System.out.println("ConstructStud......
  • 对利用jsp模板编写登录、注册界面的方法言
    使用模板的相关操作步骤详解1、可以在相关的网站上面找相关的css或者js文件,下载到一个特定的文件夹里面,以备使用2、然后,将存有相关代码的文件夹直接复制粘贴到web文件下,......
  • 一文带你玩透结构体和方法
    结构体的基本定义和使用packagemainimport( "fmt")//定义结构体类型UsertypeUserstruct{ usernamestring"用户名" passwordstring"密码" mails......
  • java学习之:类和对象、语句块、方法、递归结构!
    语句块和方法语句块语句块确定了局部变量的作用域。语句块嵌套,但是不能在两个嵌套的块内声明同名的变量。语句块可以使用语句块外的变量,语句块中定义的变量作用域只限于语句......
  • d有相同名类方法重载不适用于基类
    ​​原文​​​仅在基类上​​提供​​正确​​重载​​,而派生类上包含​​不正确​​重载时,编译器不会检查​​基类重载​​.如果​​派生类​​没有任何重载,则它可以......
  • 【Java】01基础-05 方法
    1.方法概述1.1方法的概念方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集注意:方法必须先创建才可以使用,该过程成为方法定义方法创建后并不......
  • Java方法详解
    JAVA方法详解Symtem.out.println()类对象方法JAVA方法是语句的集合,它们在一起执行一个功能方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在......
  • springboot开启单元测试的方法分享
    转自:​​http://www.java265.com/JavaFramework/SpringBoot/202206/3781.html​​SpringBoot:  SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spri......