首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关于使用MethodHandle在子类中调用祖父类重写方法的探究

关于使用MethodHandle在子类中调用祖父类重写方法的探究 注:这个例子原本出现在周志明先生的《深入理解Java虚拟机》--虚拟机字节码执行引擎章节,介于有读者朋友有疑问,这里基于Java代码层面解释一下...这里直接看Son类的thinking方法(关于为何这样实现,在《深入理解Java虚拟机》读书笔记(七)--虚拟机字节码执行引擎(下)中也解释了)。...在普通的方法调用中,这个this参数是虚拟机自动处理的,表示的是当前实例对象,我们在方法中可以直接使用。...但是在我们这个MethodHandle的例子中,相当于是模拟了invoke*指令的处理,手动调用invoke方法就需要指定这个"this"参数。...基于这个事实,我们这时可以直接在GrandFather的thinking方法中调用Son类独有的方法,使用反射或者直接类型强制转换为Son就行了。

9.5K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SpringTask实现数据库中获取任务、调用方法、方法参数

    用途 将时间跨度较高的任务加到数据表中(比如一个月执行一次),由JobService.execute方法,定时扫描数据库执行,能够避免服务停止导致的定时任务丢失。...可以将JobService.execute方法中的代码抽出,作为其他工具类使用(比如按扫描频度、执行功能等增加多种不同的execute) 本人目前的使用步骤: 在JobService类中添加可能的方法...在满足创建定时任务的地方,通过JobMapper创建定时任务保存到数据库 设置JobService.execute扫描时间 5....待完善: 如果扫描频度范围内可能多次扫描数据库(比如上述方法我设置的是每5秒执行一次扫描,那么在数据表中的人物肯定会被多次扫描),那么任务会被重复创建。...可以通过队列解决 若要支持非基本类型,可以考虑传入Class类型 反射执行的方法必须是JobService中的方法,传入全类名然后反射即可 现在比较忙,后续会把这个补充完成。

    93820

    Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)

    测试环境: win7 64位 Python版本:Python 3.3.5 代码实践: 1、在子类中通过“类名”调用父类的方法 class FatherA: def __init__(self)...__init__(self) # 在子类中调用父类的方法:父类名.方法名称(参数) if __name__ == '__main__': b = SubClassB() 运行结果: >>> ==...(如类SubClassB的父类由FatherA变为FatherD时),必须遍历整个类定义,把子类中所有的父类类名全部替换过来 2、在子类中通过“super”方法调用父类的方法 场景1、单层继承 class...__init__() # 在子类中调用父类的方法:super().方法名称(参数) if __name__ == '__main__': b = SubClassB() class FatherA...以super().method(参数)方法调用父类的方法,如果不同父类中存在同名方法method(不管参数列表是否相同),则按继承顺序,选择第一个父类中的方法。

    3.2K30

    在C++中反射调用.NET(一) 反射调用第一个.NET类的方法

    为什么要在C++中调用.NET 一般情况下,我们常常会在.NET程序中调用C/C++的程序,使用P/Invoke方式进行调用,在编写代码代码的时候,首先要导入DLL文件,然后在根据C/C++的头文件编写特殊的...注意,本文说的C++反射调用,不是对C++自身进行封装的反射功能,而是在C++/CLI代码中反射调用.NET代码,原理上跟你在.NET应用中反射调用另外一个.NET的程序集一个道理。...我们先在NetLib项目写一个简单的.NET 类,这个类的方法内部没有复杂的业务逻辑代码,仅仅用来供反射调用测试: namespace NetLib { public class User...在C++中,类的成员用 -> 符号调用,命名空间或者类的静态成员,用::调用,例如上面的构造函数中的代码: Assembly^ ass = Assembly::LoadFrom(this->assemblyFile...在C++/CLI中使用反射 反射调用第一个.NET类的方法 下面的方法,将会反射调用 User类的一个最简单的方法 : public int GetUserID(string IdString){} 该方法只有一个一个参数和一个简单的返回值

    3.2K100

    没想到吧,PHP 中在类的外部也可以调用私有方法!

    一般来说,在 Class 的外部是无法调用私有方法,这也是 Private 字面的意思,但是一些很特殊很特殊的情况下,如果需要调用,是否可以呢?其实可以使用类的反射来实现。...reflection->getClosure($object); } return call_user_func_array($callback, $args); } 简单解释一下,首先还是简单判断该方法是否存在...,接着获取对象方法的放射,然后判断一下是不是公共的方法,如果是公共就正常调用,不是则获取其闭包,最后使用回调的方式来调用。...这个函数可以让你调用对象的私有或者受保护方法,建议一些特殊的情况下才使用。为了方便大家调用,新版的 WPJAM Basic 也会集成该函数。----

    1K30

    Python中通过对象不能调用类方法和静态方法的解析

    一、类方法和静态方法的定义在了解Python中通过对象不能调用类方法和静态方法之前,首先需要明确类方法和静态方法的定义。...类方法和静态方法都是定义在类中的一种方法,可以通过类名直接调用,而不需要先创建该类的实例。...二、对象调用方法的原理在Python中,对象调用方法的原理可以简单概括为:Python通过找到方法所在的类,并将该对象作为第一个参数(通常用self)传入方法中。...3.1 类方法在类方法中,第一个参数是cls而不是self,表示该类本身。因此,如果我们通过对象调用类方法,那么实际上传入的参数不是该类本身,而是该对象本身,这就会导致类型错误。...3.2 静态方法在静态方法中,不需要传入self或cls,因此,如果我们通过对象调用静态方法,实际上传入的参数是该对象本身,而不是任何类或实例。这就意味着,静态方法无法从其中访问类或实例的属性或方法。

    94930

    thymeleaf模板引擎调用java类中的方法(附源码)

    问题分析 在My Blog项目的issue页面收到了这个问题,issue描述的是关于如何在thymeleaf模板页面中如何调用java类中的方法,问题描述如下截图: ?...test()方法处于一个空对象中,即context域中并没有对应的java实例,因此无法调用。...将此问题重现后,我又想,如果调用的方法为空会报什么错误呢?试着写了一下: 调用不存在的方法: ' + ${MethodTest.service()} + '!'"...两个异常分别是: 异常1 : Attempted to call method on null context object 调用的方法处于一个空对象中,即调用实例为空。...针对于异常2,则更加简单,仔细检查代码,不要写错调用方法名即可,不要使用未定义的方法。 ? 结语 首发于我的个人博客。 如果有问题或者有一些好的创意,欢迎给我留言,也感谢向我指出项目中存在问题的朋友。

    2.4K50

    如何访问及调用类中私有成员及方法

    二、新建一个Person类,并在类里面添加两个成员,一个是name字段,另外一个是Display方法,该方法带有一个“前缀”输入参数prefix,用于加在name字段前面,如下代码所示: class...在这里我们使用反射技术,使用Type类里的反射机制进行访问, 1)公用部分,具体代码如下: Person person = new Person(); Type type = typeof(Person...说明: BindingFlags.NonPublic:搜索非公有方法的成员; BindingFlags.Instance:搜索成员实例,包括字段及方法等。 五、如何访问Display私有方法?...说明: Invoke用于调用方法,后面的参数使用数组的方法,如有一个参数,则输入一个参数的object数组,如有多个参数,则输入多个参数的object数组。...六、源代码如下: https://pan.baidu.com/s/1qXVorQ8 七、实际用处,System.Windows.Forms下面有一个类,名叫NotifyIcon,其设置的Text只能是63

    2.7K20

    Java 反射机制详解:私有方法调用头大?如何通过反射调用类中的私有方法?

    文章目录 前言 一、私有方法在本类中直接调用 1.1、在本类中实例化,调用私有方法 1.2、尝试在其他类直接调用私有方法(错误示范) 二、使用反射实例化类强制调用私有方法 2.1、使用类加载器加载被调用的类...、运行结果 总结 前言 在 Java 中如果我们使用 new 关键字调用构造函数对类进行实例化,我们就可以根据在这个类中的修饰符来访问类中定义的非私有方法。...一、私有方法在本类中直接调用 1.1、在本类中实例化,调用私有方法 说明:被 private 关键字修饰的构造方法、方法或者数据域只在其所在的类中可见。...如下,我们创建一个 Demo 类,并定义一个私有的方法 demo(),使用 main 函数在本类中使用 new 关键字实例化类,去调用 demo() 方法,运行成功输出结果,代码如下: package...(); } } 1.2、尝试在其他类直接调用私有方法(错误示范) 如果我们直接在其他的类中实例化 Demo 类,来直接调用 demo() 方法,就会发现 IDE 直接产生编译错误,很明显我们直接在另一个类中调用私有方法是行不通的

    2.4K21

    梳理:python—同一个类中的方法调用

    因为在自己实践综合练习学过的知识时,突然觉得有些知识点的运用总是不成功,于是翻过课本进行回顾,总是觉得是对的,可是当再进一步思考“既然是对的,为什么在程序中总是不成功呢?”...,后来发现,自己理所当然的理解(忽略了细节知识),导致程序通不过,现在结合同一个类中的不同方法中的变量调用 VS 不同函数中的变量调用。...同一个类中的不同方法中的变量调用: class A(): def a_add_b(self): a=10 b=20 self.s =a+b...+ self.s s2= c + self.s1 print(s) print(s2) t=A() t.a_add_b() t.c_add_ab() 类不同方法函数的调用是通过直接是...self.变量名 不同函数中的变量调用: def a_add_b(): a = 10 b = 20 s = a + b s1= a*b return s,s1

    2.8K20
    领券