首页 新闻 赞助 找找看

关于深入理解JVM一书中的问题

0
[待解决问题]

我看书中运行的结果是 i am grandfather 但是我实测结果是i am father
是由于JDK8 的缘故还是怎么呢? 求大神指点

package lookup;

import static java.lang.invoke.MethodHandles.lookup;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodType;

class GrandFather{
void think() {
System.out.println("i am grandfather");
}
}

class Father extends GrandFather{

void think() {
    System.out.println("i am father");
}

}

class Son extends Father{

void think() {
    try {
        MethodType mt = MethodType.methodType(void.class);
        MethodHandle mh = lookup().findSpecial(GrandFather.class, "think", mt ,getClass());
        
        mh.invoke(this);
    } catch (Throwable e) {
        
    }
}

}

public class Test {

public static void main(String[] args) {
    new Son().think();  
}
    

}

水冷的主页 水冷 | 菜鸟二级 | 园豆:202
提问于:2018-09-11 17:52
< >
分享
所有回答(1)
0

是周志明老师的那本书吗?我在jdk1.8上测试结果也是“i am father”.
这篇文章给了说明,https://www.imooc.com/article/details/id/25992

让我发会呆 | 园豆:2909 (老鸟四级) | 2018-09-11 18:30

源码来自周志明深入理解Java虚拟机(第二版)第八章 P268 知道为什么能和我分享一下吗?

支持(0) 反对(0) 水冷 | 园豆:202 (菜鸟二级) | 2018-09-12 08:58

@水冷: 啊哦,我也是看了你的提问之后,才想到这么一节,让我学到了新的一种类似于反射,但是有别于反射机制的一个方法,可以去执行类中的某个方法。它对于我来说就像是一个api接口一样,知道这种用法。至于为什么?我也理解不了。这篇文章说的感觉有点道理吧:https://www.imooc.com/article/details/id/25992,

支持(0) 反对(0) 让我发会呆 | 园豆:2909 (老鸟四级) | 2018-09-12 09:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册