国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

java - getMethod 的第二個參數是null和new Class[]{}的區別?

瀏覽:77日期:2024-02-02 18:35:51

問題描述

在反射方法的時候,如果某方法沒有參數好像有下面兩種方法去獲得

getMethod(method_name_str, new Class[]{});或者getMethod(method_name_str, null);

請問這兩種方法有區別嗎?

問題解答

回答1:

就效果來說,對于 Class 類的 getMethod 方法,這兩種參數沒有區別。我們可以查看 getMethod 的源碼,getMethod 層層調用之后,會使用下面的方法:java - getMethod 的第二個參數是null和new Class[]{}的區別?

這個方法中,可以看到有一個 arrayContentsEq 方法用來匹配方法的參數:java - getMethod 的第二個參數是null和new Class[]{}的區別?

可以發現,對于 parameterTypes 為 null 的情況,和對于 parameterTypes 為空數組(length == 0)的情況,效果是一樣的 —— 假設此時我們要獲取的方法 m 的參數為空,那么該方法的 m.getParameterTypes() 返回的數組(a2)的長度即為 0,我們可以發現 a1 == null 或者 a1.length == 0 的時候,arrayContentsEq 方法返回的都是 true(即匹配成功)。

回答2:

如果某方法沒有參數,這兩種情況其實沒什么差別。

跟蹤getMethod(String name, Class<?>... parameterTypes)的源碼,可以發現如下代碼,其中a1為傳入的parameterTypes,a2為根據參數name找到的Method實例調用的method.getParameterTypes()。程序根據比較a1和a2來返回正確的Method。

private static boolean arrayContentsEq(Object[] a1, Object[] a2) { if (a1 == null) {return a2 == null || a2.length == 0; } if (a2 == null) {return a1.length == 0; } if (a1.length != a2.length) {return false; } for (int i = 0; i < a1.length; i++) {if (a1[i] != a2[i]) { return false;} } return true;}

標簽: java
相關文章:
主站蜘蛛池模板: 殴美一级视频 | 99久久在线 | 日本三级香港三级人妇 m | 亚洲国产精品久久久久久网站 | 7ass欧美 | 欧美成人精品手机在线观看 | 欧美成人激情在线 | 欧美高清性色生活片免费观看 | 精品国产一区二区三区www | 国产成人精视频在线观看免费 | 99久久精品费精品国产一区二 | 日本苍井一级毛片 | 毛片免费视频网站 | 亚洲精品视频观看 | 午夜精品同性女女 | 久久免费精品视频在线观看 | 男人天堂中文字幕 | 国产一区二区影院 | 久草在线视频看看 | 久草热久| 这里只有精品国产 | 韩国一级特黄毛片大 | 美女被免费视频网站a国产 美女被免费网站视频软件 美女被免费网站在线软件 美女被免费网站在线视频软件 | 久久精品毛片 | 一区二区国产在线观看 | 久久免费成人 | 成人免费在线观看视频 | 国产成人精品免费午夜 | 国产黄色自拍视频 | 国产在线黄 | 精品国产乱码久久久久久一区二区 | 国产精品2019 | 亚洲精品久久久中文字 | 无限观看社区在线视频 | 亚洲免费一级片 | 男子操女子 | 免费在线亚洲 | 一区二区三区免费精品视频 | 黄频免费影院 | 国产高清片 | 1204国产成人精品视频 |