1 | /** |
该 native
方法在我开发 Java Agent 的过程中进行了调试,发现对于满足实现关系的类,如果不是由相同的类加载器加载,则会返回 false
。
比如以下代码:
1 | package me.tianshuang; |
1 | package me.tianshuang; |
1 | package me.tianshuang; |
1 | package me.tianshuang; |
输出如下:
1 | true |
同理可知,如果我们对不是由同一类加载器加载的 Class 进行 java.lang.Class#asSubclass
方法调用,将会触发 ClassCastException
。
1 | /** |
执行以下代码:
1 | package me.tianshuang; |
输出如下:
1 | true |
同理,受类加载器影响的还有 instanceof
关键字,比如如下代码:
1 | package me.tianshuang; |
输出如下:
1 | true |
最后,不得不提的是我认为 java.lang.Class#isAssignableFrom
与 java.lang.Class#asSubclass
的方法名具有误导性,不太分得清操作的为参数还是调用方,StackOverflow 上也有用户提出,如果不详细查看方法注释的话确实不太分得清楚。