久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

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

java - getMethod 的第二個參數(shù)是null和new Class[]{}的區(qū)別?

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

問題描述

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

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

請問這兩種方法有區(qū)別嗎?

問題解答

回答1:

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

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

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

回答2:

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

跟蹤getMethod(String name, Class<?>... parameterTypes)的源碼,可以發(fā)現(xiàn)如下代碼,其中a1為傳入的parameterTypes,a2為根據(jù)參數(shù)name找到的Method實例調(diào)用的method.getParameterTypes()。程序根據(jù)比較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
相關文章:
主站蜘蛛池模板: 浙江省| 绥江县| 中江县| 永福县| 昆山市| 新和县| 库车县| 怀集县| 师宗县| 威信县| 景宁| 河南省| 城口县| 苏尼特左旗| 许昌市| 潼关县| 宝清县| 南澳县| 安福县| 徐闻县| 富顺县| 石柱| 沁源县| 芮城县| 安溪县| 安义县| 璧山县| 冕宁县| 洱源县| 满洲里市| 木兰县| 宣城市| 锡林浩特市| 滨海县| 梅州市| 北京市| 勐海县| 新乡市| 关岭| 万宁市| 宁晋县|