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

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

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

瀏覽:58日期: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
相關文章:
主站蜘蛛池模板: 欧美人体在线 | 女让张开腿让男人桶视频 | 一级毛片免费播放视频 | 九九精品国产兔费观看久久 | 99re在线精品视频 | 波多野结衣视频免费在线观看 | 欧美亚洲国产视频 | 97capcom超频在线 | 亚洲爽视频 | 久久免费影院 | 免费一级a毛片在线播放 | 成年女人毛片免费视频永久vip | 久草视频福利在线 | 婷婷丁香花麻豆 | 免费看一毛一级毛片视频 | www.亚洲天堂 | 免费黄色毛片视频 | 在线成人毛片 | 在线观看免费国产成人软件 | 一级午夜a毛片免费视频 | 国产成人资源 | 国产不卡a | 亚洲网址在线观看 | 国产自愉自愉全免费高清 | 国产成人免费永久播放视频平台 | 18视频网站在线观看 | 欧美成人三级视频 | 特级片免费看 | 国产九九精品视频 | 国产v片成人影院在线观看 国产v片在线播放免费观 | 午夜毛片不卡高清免费 | 成人免费视频社区 | 澳门毛片免费观看 | 日本高清色本在线www游戏 | 日韩欧美在线综合网高清 | 国产一级视频在线观看 | 免费高清欧美一区二区视频 | 一及黄色毛片 | 日本韩国台湾香港三级 | 欧美一级毛片欧美一级成人毛片 | 香港经典a毛片免费观看看 香港经典a毛片免费观看爽爽影院 |