日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ASM 判定一个类,实现了指定接口

發(fā)布時(shí)間:2023/12/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASM 判定一个类,实现了指定接口 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??

ASM 判定一個(gè)類,實(shí)現(xiàn)了指定接口

技術(shù)支持

ASM 中,ClassReader 類:對(duì)已存在的進(jìn)行解析,并提供獲取類信息的方法。

通過 ClassReader ,實(shí)現(xiàn)對(duì)一個(gè)類的解析。

處理流程

依據(jù)如下流程,判斷出一個(gè)類是否實(shí)現(xiàn)了某個(gè)接口:

  • 循環(huán)判斷是否實(shí)現(xiàn)目標(biāo)接口
  • 遞歸判斷父接口是否存在目標(biāo)接口
  • 遞歸判斷父類是否實(shí)現(xiàn)目標(biāo)接口

具體實(shí)現(xiàn)

具體實(shí)現(xiàn)代碼如下 :

package utils;import org.objectweb.asm.ClassReader;import java.io.IOException; import java.util.Set;/*** 判斷某類是否實(shí)現(xiàn)了指定接口集合** @author pengpj* @date 2018/11/27*/ public class SpecifiedInterfaceImplementionChecked {/*** 判斷是否實(shí)現(xiàn)了指定接口** @param reader class reader* @param interfaceSet interface collection* @return check result*/public static boolean hasImplSpecifiedInterfaces(ClassReader reader, Set<String> interfaceSet) {if (isObject(reader.getClassName())) {return false;}try {if (containedTargetInterface(reader.getInterfaces(), interfaceSet)) {return true;} else {ClassReader parent = new ClassReader(reader.getSuperName());return hasImplSpecifiedInterfaces(parent, interfaceSet);}} catch (IOException e) {return false;}}/*** 檢查當(dāng)前類是 Object 類型** @param className class name* @return checked result*/private static boolean isObject(String className) {return "java/lang/Object".equals(className);}/*** 檢查接口及其父接口是否實(shí)現(xiàn)了目標(biāo)接口** @param interfaceList 待檢查接口* @param interfaceSet 目標(biāo)接口* @return checked result* @throws IOException exp*/private static boolean containedTargetInterface(String[] interfaceList, Set<String> interfaceSet) throws IOException {for (String inter : interfaceList) {if (interfaceSet.contains(inter)) {return true;} else {ClassReader reader = new ClassReader(inter);if (containedTargetInterface(reader.getInterfaces(), interfaceSet)) {return true;}}}return false;}}

測(cè)試用例

部分測(cè)試用例如下:

private static Set<String> set;static {if (set == null) {set = new HashSet<>();}set.add("com/cvte/myou/apm/agent/utils/SpecifiedInterfaceImplCheckedTest$A");}@Testpublic void hasImplSpecifiedInterfacesTest() throws IOException {Assert.assertEquals(true, SpecifiedInterfaceImplChecked.hasImplSpecifiedInterfaces(new ClassReader(B.class.getName()), set));Assert.assertEquals(true, SpecifiedInterfaceImplChecked.hasImplSpecifiedInterfaces(new ClassReader(C.class.getName()), set));}@Testpublic void hasImplSpecifiedInterfacesObjectTest() throws IOException {Assert.assertEquals(false, SpecifiedInterfaceImplChecked.hasImplSpecifiedInterfaces(new ClassReader(Object.class.getName()), set));}@Testpublic void hasImplSpecifiedInterfacesInterfaceTest() throws IOException {Assert.assertEquals(true, SpecifiedInterfaceImplChecked.hasImplSpecifiedInterfaces(new ClassReader(D.class.getName()), set));}interface A {void hello();}class B implements A {@Overridepublic void hello() {}}abstract class C implements A {}interface D extends A {}

總結(jié)

ASM 中提供了 ClassReader ,對(duì)已存在的類進(jìn)行解析,可以讓我們?cè)跊]有源碼的情況下,對(duì)類進(jìn)行操作。

轉(zhuǎn)載于:https://my.oschina.net/pding/blog/2962373

總結(jié)

以上是生活随笔為你收集整理的ASM 判定一个类,实现了指定接口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久青青| missav|免费高清av在线看 | 在线观看黄色网页 | 九九热免费精品视频 | 欧洲av一区二区三区 | 欧美我不卡 | fexx性欧美| 婷婷久久久久久 | 欧美成人一区二区视频 | 少妇专区 | 男人干女人视频 | 人人爽人人爽人人片av | 91看黄| 国产成人在线免费观看视频 | 公侵犯人妻一区二区 | 日本欧美色 | 日韩字幕在线观看 | 善良的公与媳hd中文字 | 一级特黄色 | 在线免费观看av网 | 91免费视频黄 | 久在操| 成人免费看片又大又黄 | 亚洲伦乱 | 亚洲精品视频免费 | 色婷婷av一区二区三区软件 | 亚洲色图激情小说 | 黄色3级视频 | 无码aⅴ精品一区二区三区浪潮 | 97精品久久人人爽人人爽 | 亚洲一区二区三区电影在线观看 | 99re这里只有精品在线观看 | av影片在线| 18成人免费观看视频 | 超碰免费在线观看 | 香蕉视频官网在线观看 | 精产国品一二三产品蜜桃 | jizz网站| 亚洲一二三区av | julia在线播放88mav | 俄罗斯毛片 | 国产婷婷在线视频 | 国产区在线视频 | caopeng在线| 黄色日本网站 | 中文字幕女同女同女同 | 日本黄色网址大全 | 给我看免费高清在线观看 | 成人青青草 | 草草影院一区二区三区 | 午夜特片网 | 亚洲美女一区二区三区 | 三级免费| 五月婷婷免费视频 | 日日爱夜夜爱 | 国产一级伦理片 | 91免费视频网 | 国产三级一区二区三区 | 日韩欧美一区二区三区在线观看 | 国产精品久免费的黄网站 | 情五月 | 日韩三级在线观看 | 99热1| 午夜精品免费视频 | 亚洲欧洲成人在线 | 天堂影院一区二区 | 久久精品99久久 | 激情精品 | 在线播放网址 | 欧美成人一级 | 久草免费在线观看 | 亚洲欧洲视频在线观看 | 影音先锋国产在线 | 色综合天天 | 欧美视频一 | 中文字幕码精品视频网站 | xxxx少妇| 天天操狠狠干 | 777免费视频 | 久久超级碰碰 | 特级西西444www大精品视频 | 亚洲影院在线播放 | 三级av网站 | 天天谢天天干 | 色妞视频 | 免费精品 | aaaaaaa毛片| 精品人妻在线视频 | 欧美大尺度做爰啪啪床戏明星 | 免费看a级片 | 久久精品国产一区二区 | aaaaaav| 精品在线视频免费观看 | 美女擦边视频 | 欧美三级网 | 在线看免费毛片 | 国产精品无码一区 | 69视频污 | 草逼视频网站 |